我正在使用Wix安装程序,该安装程序应基于同一运行程序安装多个服务。这一些将由跑步者加载的dll。使用sc.exe可以在我的测试系统上正常工作。现在我的问题是,我可以为此使用标准的Wix ServiceInstall吗?我只有一个Runner.exe,而且我不确定如何用XML编写它。还是“自定义操作”是正确的方法?
谢谢!
ServiceInstall和ServiceControl元素不是每个说的after file元素,但它们是Component元素的子元素。它们以恰好是File元素的组件的键路径为目标。您可以轻松地在单个组件中定义指向同一可执行文件的多个服务。
<Component Id="c1" Guid="dbc1b8dd-14e1-380f-5793-4a746fa0c5c5">
<File Id="f1" Source="$(var.SourceDir)\TestService.exe" KeyPath="yes" />
<ServiceInstall Id="si1" Name="TestService1" DisplayName="TestService1 Service" Description="TestService1 Service" ErrorControl="normal" Start="auto" Type="ownProcess" />
<ServiceControl Id="sc1" Name="TestService1" Start="install" Stop="both" Remove="both" Wait="yes" />
<ServiceInstall Id="si2" Name="TestService2" DisplayName="TestService2 Service" Description="TestService Service" ErrorControl="normal" Start="auto" Type="ownProcess" />
<ServiceControl Id="sc2" Name="TestService2" Start="install" Stop="both" Remove="both" Wait="yes" />
</Component>
要使每个服务的行为不同,您必须在服务中编写代码以访问ServiceBase.ServiceName(可能是OnStart方法中的this.ServiceName)。从这里可以动态加载来自不同程序集的不同类。