WiX安装程序和自定义操作

时间:2009-07-17 14:14:28

标签: c# windows-services wix

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

  1. 我似乎无法使用MSBuild构建安装程序(我已经尝试过DevEnv.exe方法)。该服务是一个更大的项目的一小部分,我希望MSI文件的构建与我的构建同时发生。我已将WiX用于其他安装程序,但此特定应用程序需要在安装程序中进行配置步骤。
  2. 安装Windows服务时,VS 2008的部署项目中似乎存在错误。在修复和升级时,服务永远不会停止。 (由RemoveExistingProducts的无效序列引起 - 我通过将序列更改为1525来解决此问题)
  3. VS2008的部署项目有什么好处,我创建了一个自定义操作,显示一个表单,该表单从用户获取一些信息,连接到WCF服务,该服务检索数据并将其存储在本地计算机上的加密数据存储中供服务使用。

    现在,我看起来又高又低,而且我认为WiX无法实现这一点。程序安装后运行EXE并不“好”。我希望能够在我的自定义操作DLL中调用一个显示表单的方法,并进行所需的处理。有没有办法用WiX做到这一点? - 甚至在WiX中创建一个自定义GUI,获取值并将这些值传递给处理方法

    所以,问题:

    1. 这可以用WiX吗?
    2. 如果没有我的替代方案?
    3. 非常感谢

3 个答案:

答案 0 :(得分:1)

你绝对可以使用WiX安装和启动服务 - 我每天都在这样做: - )

查看ServiceInstallServiceControl元素(如果您需要指定更多元素,还有更多元素。)

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

<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>

然后,您需要将此组件添加到正在安装的安装中的某个功能中 - 这就是它!

马克

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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