Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WiX安装程序和自定义操作_C#_Windows Services_Wix - Fatal编程技术网

C# WiX安装程序和自定义操作

C# WiX安装程序和自定义操作,c#,windows-services,wix,C#,Windows Services,Wix,我有一个不是那么简单的Windows服务(C#)的应用程序。我使用Visual Studio 2008创建了一个安装程序,它负责在客户端计算机上安装服务,但使用Visual Studio部署项目有两个缺点: 我似乎无法让安装程序使用MSBuild生成(我尝试了DevEnv.exe方法)。该服务是一个大得多的项目的一小部分,我希望MSI文件的构建与我的构建同时进行。我已经在其他安装程序中使用了WiX,但是这个特定的应用程序需要在安装过程中进行配置 在安装windows服务时,VS2008的部署项目

我有一个不是那么简单的Windows服务(C#)的应用程序。我使用Visual Studio 2008创建了一个安装程序,它负责在客户端计算机上安装服务,但使用Visual Studio部署项目有两个缺点:

  • 我似乎无法让安装程序使用MSBuild生成(我尝试了DevEnv.exe方法)。该服务是一个大得多的项目的一小部分,我希望MSI文件的构建与我的构建同时进行。我已经在其他安装程序中使用了WiX,但是这个特定的应用程序需要在安装过程中进行配置
  • 在安装windows服务时,VS2008的部署项目中似乎有一个bug。维修和升级时,服务从未停止。(由RemoveExistingProducts的无效序列引起-我已通过将序列更改为1525解决了此问题)
  • VS2008部署项目的优点在于,我创建了一个自定义操作,它显示一个表单,该表单从用户那里获取一些信息,连接到WCF服务,该服务检索数据并将其存储在本地计算机上的加密数据存储中,供服务使用

    现在,我已经看了很多东西,我不认为WiX可以做到这一点。在程序安装后运行EXE并不“好”。我希望能够在自定义操作DLL中调用一个方法来显示表单,并执行它需要的处理。WiX有没有办法做到这一点甚至,在WiX中创建一个自定义GUI,获取值并将这些值传递给一个方法进行处理

    因此,问题是:

  • WiX能做到这一点吗
  • 如果没有,我的选择是什么

  • 非常感谢

    您完全可以使用WiX安装和启动服务-我每天都在这样做:-)

    查看和元素(如果需要指定更多,则还有更多)

    基本上,您需要首先将服务文件(YourService.exe)定义为组件中的文件,然后除此之外还需要指定ServiceInstall(可能还有ServiceControl)元素

    <Component Id='YourServiceComponent' Guid='.....' DiskId='1'>
      <File Id='YourServiceEXEFile' Name='YourService.exe' 
            src='(path to your EXE)/YourService.exe' KeyPath='yes'/>
      <ServiceInstall Id='YourServiceInstall' Name='YourServiceName' 
                      Description='.....' ErrorControl='normal' 
                      Start='auto' Type='ownProcess' Vital='yes' />
      <ServiceControl Id='UninstallYourService' Name='YourServiceName' 
                      Remove='uninstall' Wait='yes' />
    </Component>
    
    
    
    然后,您需要将此组件添加到正在安装的安装中的一个功能中—仅此而已


    Marc

    你的问题1的答案是肯定的,但有点牵扯其中。您可以定义对话框以使用和存储it会话属性从用户收集信息。可以使用将这些对话框插入到流中。然后,您可以创建一个vb脚本CustomAction,并使用这些会话属性执行任何操作。查看更多信息。

    有关WiX服务控制节点的注意事项:


    如果您的服务依赖于安装程序放入GAC的程序集,那么它将无法启动。由于某些原因,WiX会在将程序集发布到GAC之前安排StartService操作,因此如果是这种情况,您需要编写一个自定义操作来启动服务。

    Hi Marc,感谢您的回复。我已将服务安装部件拆下。我遇到的问题是向用户显示一个屏幕,用户可以在其中输入一些配置信息,然后将这些信息保存到磁盘。我希望这是安装包的一部分。如果我的问题不清楚,请道歉。嗨,谢谢你的回复。我想我需要找到一种替代方法来实现这一点,因为需要通过VBScript(加密、与SQLite db对话、与WCF服务对话)很难实现。我想我将使用Wix做一个基本的安装程序,并有一个设置应用程序来管理安装后服务启动的设置。