gpt4 book ai didi

wix - 使用 WiX 将 NServiceBus.Host 安装为服务

转载 作者:行者123 更新时间:2023-12-04 20:12:03 25 4
gpt4 key购买 nike

我正在使用 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>

最佳答案

您快到了。您需要传递 NServiceBus.Host.exe 预期的命令行参数到 Arguments ServiceInstall 上的属性标记喜欢

<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"
Arguments="-service NServiceBus.Production /serviceName:[Product].Host">

首先使用 NSB 主机安装您的服务,然后查看来自 Windows 服务的所有命令行参数并将它们放入您的 WiX 安装程序中。

编辑:
如果您不想运行自定义操作来让 NSB 在 WiX @ 安装时创建队列和/或做其他事情,您可以通过添加自定义 NSB profile 来达到类似的效果。在您的代码中,例如
namespace YourNamespace
{
public class YourProfile : NServiceBus.IProfile { }

public class YourProfileBehaviour : IHandleProfile<YourProfile>
{
public void ProfileActivated()
{
WindowsInstallerRunner.RunInstallers = true;
}
}
}

请记住,每次重新启动服务时,使用上述配置文件都会运行 NSB 安装程序代码(例如,如果需要,请检查并添加队列)。我想这两种方式都有取舍。

关于wix - 使用 WiX 将 NServiceBus.Host 安装为服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18306254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com