如何使用 WiX 安装和启动 Windows 服务
Posted
技术标签:
【中文标题】如何使用 WiX 安装和启动 Windows 服务【英文标题】:How to install and start a Windows Service using WiX 【发布时间】:2010-12-28 20:40:07 【问题描述】:我尝试在 Wix 中使用以下代码。
但是在安装时,安装程序在状态下冻结了 3 分钟:正在启动服务,然后我收到此消息“服务作业服务无法启动。验证您是否有足够的权限来启动系统服务”。 我的代码有什么问题吗?并且我可以要求用户在安装过程中输入windows系统的用户名和密码以获得“权限”吗?
非常感谢!
<File Id='JobServiceEXE' Name='JobService.exe' DiskId='1'
Source='JobService.exe' Vital='yes' KeyPath='yes'/>
<ServiceInstall Id="ServiceInstaller" Type="ownProcess" Vital="yes"
Name="JobService" DisplayName="123 Co. JobService"
Description="Monitoring and management Jobs" Start="auto"
Account="LocalSystem" ErrorControl="ignore" Interactive="no" />
<ServiceControl Id="StartService" Stop="both" Remove="uninstall"
Name="JobService" Wait="yes" />
</Component>
【问题讨论】:
我去掉了"Wait="yes"",现在安装OK了,但是Windows任务管理器中服务"JobService"的状态是"stopped",怎么能自动启动呢?谢谢。 Start="auto" 在 ServiceInstall 元素中 【参考方案1】:以下代码适用于我...无需提示输入用户名/密码 :)
<File Id='JobServiceEXE' Name='JobService.exe' DiskId='1' Source='JobService.exe' KeyPath='yes'/>
<ServiceInstall
Id="ServiceInstaller"
Type="ownProcess"
Name="JobService"
DisplayName="123 Co. JobService"
Description="Monitoring and management Jobs"
Start="auto"
Account="[SERVICEACCOUNT]"
Password="[SERVICEPASSWORD]"
ErrorControl="normal"
/>
<ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="JobService" Wait="yes" />
</Component>
【讨论】:
感谢您回答我的问题,但服务的状态仍然是“停止”,即使在我重新启动系统后。 安装完成后重启前会手动启动吗? 谢谢,现在工作正常。我使用的可执行程序不是windows服务exe,现在我使用VB编写的windows服务来启动它。【参考方案2】:我发现此页面上的解决方案可以正确安装服务,但 ServiceControl 元素不会启动服务。
将 wix 安装的服务与手动安装的服务(“JobService.exe /install”)进行比较,“可执行文件的路径”字段缺少启动开关。使用 ServiceInstall 的 arguments 属性在 wix 中修复了此问题;
<File Id='JobServiceEXE' Name='JobService.exe' DiskId='1' Source='JobService.exe' KeyPath='yes'/>
<ServiceInstall
Id="ServiceInstaller"
Type="ownProcess"
Name="JobService"
DisplayName="123 Co. JobService"
Description="Monitoring and management Jobs"
Start="auto"
Account="[SERVICEACCOUNT]"
Password="[SERVICEPASSWORD]"
ErrorControl="normal"
Arguments=" /start JobService"
/>
<ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="JobService" Wait="yes" />
</Component>
潜伏了很长时间,这是我在这里的第一篇文章 - 我希望它对某人有所帮助。
【讨论】:
如果您需要传递参数来启动它,那么很可能该服务没有正确遵守 Windows API【参考方案3】:针对 WiX 3.x 版用户的更新。以下代码将在本地帐户下安装并启动服务。请注意 ServiceInstall 标记中的 Arguments 属性。
<File Source="$(var.MyService.TargetPath)" />
<ServiceInstall Id="ServiceInstaller" Name="MyService" Type="ownProcess" Vital="yes" DisplayName="My Service" Description="My Service Description" Start="auto" Account="LocalSystem" ErrorControl="normal" Arguments=" /start MyService" Interactive="no" />
<ServiceControl Id="StartService" Name="MyService" Stop="both" Start="install" Remove="uninstall" Wait="yes" />
【讨论】:
【参考方案4】:对我来说,它至少有一次帮助,我删除了安装和卸载服务
<ServiceControl Remove="both" />
我认为这从 Regedit 中删除了一些内容
【讨论】:
以上是关于如何使用 WiX 安装和启动 Windows 服务的主要内容,如果未能解决你的问题,请参考以下文章