WIX工具集CustomAction启动Windows服务

时间:2015-09-16 04:52:09

标签: wix windows-services custom-action

是否可以使用CustomAction启动我安装的Windows服务? 是否可以使用CustomAction更改以前安装的Windows服务的“开始类型”?

如果有人能引导我朝着正确的方向前进,我真的很感激!

4 个答案:

答案 0 :(得分:0)

指导您正确的方向是建议您自定义操作不适合此。您可以使用Registry元素/表来更改现有服务的启动类型,并且可以使用ServiceControl元素/表来启动您未安装的服务。

答案 1 :(得分:0)

您可以编写自定义操作代码来启动服务,是的,并且作为C ++人我会使用Win32 StartService API。但为什么这样呢? Windows Installer将使用带有WiX ServiceControl元素的StartServices操作执行此操作。我知道在(例如)InstallFinalize之后用CA启动服务的唯一原因是因为它具有依赖性(GAC或Win32 SxS中的程序集),直到StartServices操作之后才会提交。

更改开始类型的推荐方法是使用WiX ServiceConfig元素。

答案 2 :(得分:0)

这是我用来直接从WIX自定义操作启动服务的示例代码

<CustomAction Id="StartWinService" Directory="INSTALLLOCATION" ExeCommand='NET START "[SERVICENAME]"' Execute="immediate" Return="ignore" />

答案 3 :(得分:0)

我最后在InstallDirDlg中放置了一个复选框,并根据其值决定是否使用带有Start ='auto'的ServiceInstall元素的Component,或者使用带有Start ='demand'的ServiceInstall元素的Component。这解决了我的第一个问题。但我无法使用ServiceControl元素来启动服务,因为这将在安装后直接启动服务,并且需要先配置我的服务才能正常工作。所以我最终从我的源代码开始我的服务。这样我就可以使用在ExitDialog'Finish'-Control上触发的CustomAction。