我正在使用 WiX 为我们基于 NServiceBus 的解决方案创建安装程序,但在安装后无法启动主机服务。
如果我使用 命令行从命令行运行主机的安装程序NServiceBus.Host.exe /install
,它会很好地安装,甚至在我启动服务时成功启动。
但是,当我使用ServiceInstall
元素在 WiX 中创建服务时,它无法启动服务。我已经尝试在我的安装程序中使用一个ServiceControl
元素以及从 WIndows 服务控制面板安装后启动该服务。
我试图在 WiX 中使用的代码是:
<Component Id="NServiceBus.Host" Guid="PUT-GUID-HERE" Win64="yes">
<File Id="NServiceBus.Host" KeyPath="yes"
Source="$(var.[Project].TargetDir)NServiceBus.Host.exe" Checksum="yes" />
<ServiceInstall Id="NServiceBus.Host.Install"
Name="[Product].Host" DisplayName="[Product]" Type="ownProcess"
Account="NT Authority\Network Service" Interactive="no" Start="auto"
Vital="yes" ErrorControl="normal">
<ServiceDependency Id="MSMQ" />
<ServiceDependency Id="MSDTC" />
</ServiceInstall>
<ServiceControl Id="NServiceBus.Host.Control" Name="[Product].Host"
Start="install" Stop="both" Remove="uninstall" Wait="yes" />
</Component>
我在其他项目中使用相同的代码来安装和运行服务,所以我很确定问题与 NServiceBus 的主机有关。此处的服务似乎也安装正确,但无法运行。
有没有人能够NServiceBus.Host.exe
使用 WiX 安装为服务?或者有谁知道我运行时是否有其他步骤发生NServiceBus.Host.exe /install
在我的 WiX 安装程序中?
CustomAction
我知道我可以在运行的 WiX 中创建一个,NServiceBus.Host.exe /install
但如果可能的话,我宁愿避免这种情况,并以正确的 (WiX) 方式安装服务。它还避免了我需要考虑卸载操作和排序。
编辑:作为参考,这是我使用 WiX 创建队列的方式MsmqExtension
:
<Component Id="NServiceBus.Host.Queue" Guid="PUT-GUID-HERE" Win64="yes">
<msmq:MessageQueue Id="Queue1" Label="[Product] Host"
PathName=".\private$\[Product].Host"
Transactional="yes" PrivLevel="optional" />
<msmq:MessageQueue Id="Queue2" Label="[Product] Host Retries"
PathName=".\private$\[Product].Host.Retries"
Transactional="yes" PrivLevel="optional" />
<msmq:MessageQueue Id="Queue3" Label="[Product] Host Timeouts"
PathName=".\private$\[Product].Host.Timeouts"
Transactional="yes" PrivLevel="optional" />
<msmq:MessageQueue Id="Queue4" Label="[Product] Host Timeouts Dispatcher"
PathName=".\private$\[Product].Host.TimeoutsDispatcher"
Transactional="yes" PrivLevel="optional" />
</Component>