如何安装服务在维克斯一些其他文件,并确定哪些文件是实际的服务EXE文件?

场景:我这是只是一个单一的EXE文件,并将其安装在维克斯Windows NT服务使用此代码服务:

<Component Id='InstallMyServiceComponent' Guid='{....}' DiskId='1'>
   <File Id='InstallMyServiceEXEFile' LongName='MyService.exe' 
         Name='MyServ.exe' src='MyService/bin/release/MyService.exe' KeyPath='yes'/>
   <ServiceInstall Id='InstallMyService' Name='MyService' Description='My Service'
         ErrorControl='normal' Start='auto' Type='ownProcess' Vital='yes' />
   <ServiceControl Id='UninstallMyService' Name='MyService' Remove='uninstall' 
         Wait='yes' />
</Component>
<Component Id='RunMyServiceComponent' Guid='.......'>
   <ServiceControl Id='RunMyService' Name='MyService' Start='install' 
         Stop='uninstall' Wait='no' />
</Component>

和我有一个功能,那么这将允许安装和任选启动该服务。

现在,我的问题是 - 现在我的业务不断壮大,单EXE不再是单一的EXE - 这是多个文件,EXE,DLL,和一些支持文件

然而,如何可以安装现在??

我试图与我的所有文件的分量

<Component Id="MyService" Guid="......" DiskId="1">
  <File Id="fileMyService_framework_dll" LongName="Framework.dll" 
        Name="Framewrk.DLL" src="MyService\Framework.dll" />
  <File Id="fileMyService_dal_dll" LongName="MyServiceDAL.dll" 
        Name="SrvcDAL.DLL" src="MyService\ServiceDAL.dll" />
  <File Id="fileMyService_helpers_dll" LongName="Helpers.dll" 
        Name="Helpers.DLL" src="MyService\Helpers.dll" />
  <File Id="fileMyService_exe" LongName="MyService.exe" 
        Name="MySrv.EXE" src="MyService\MyService.exe" />
</Component>

首先,我试图只是则ServiceInstall和的ServiceControl标记添加到这个组件:

<Component Id="MyService" Guid="......" DiskId="1">
  <File Id="fileMyService_framework_dll" LongName="Framework.dll" 
        Name="Framewrk.DLL" src="MyService\Framework.dll" />
  <File Id="fileMyService_dal_dll" LongName="MyServiceDAL.dll" 
        Name="SrvcDAL.DLL" src="MyService\ServiceDAL.dll" />
  <File Id="fileMyService_helpers_dll" LongName="Helpers.dll" 
        Name="Helpers.DLL" src="MyService\Helpers.dll" />
  <File Id="fileMyService_exe" LongName="MyService.exe" 
        Name="MySrv.EXE" src="MyService\MyService.exe" />
   <ServiceInstall Id='InstallMyService' Name='MyService' 
        Description='My Service' ErrorControl='normal' Start='auto' 
        Type='ownProcess' Vital='yes' />
   <ServiceControl Id='UninstallMyService' Name='MyService' 
        Remove='uninstall' Wait='yes' />
</Component>

但然后我的“Framework.dll”被设置为正在创建的服务的源路径........

所以,我想我会创建第二个组件实际安装的服务,使用ServiceInstall,我只希望参考使用FileRef该服务的EXE文件 - 但似乎并不存在(至少在Wix2)。

<Component Id='InstallMyServiceComponent' Guid='{....}' DiskId='1'>
   <FileRef Id='fileMyService_exe' KeyPath='yes'/>
   <ServiceInstall Id='InstallMyService' Name='MyService' 
         Description='My Service' ErrorControl='normal' Start='auto' 
         Type='ownProcess' Vital='yes' />
   <ServiceControl Id='UninstallMyService' Name='MyService' 
         Remove='uninstall' Wait='yes' />
</Component>

所以 - 什么是贫穷的WiX笔者所要做的安装所有必要的文件,并仍然得到NT Service安装回暖(从文件组件列表中不只是任意文件)正确的EXE文件??

马克

有帮助吗?

解决方案

,则ServiceInstall元件最终将指向组件的“的keyPath”则ServiceInstall在缺省情况下的维克斯工具集挑选在组件的第一个文件或的RegistryKey元素作为的keyPath。当您添加文件到您的组件,在列表的顶部将.dll成为的keyPath。

在一般情况下,更小的元件比更大的好。因此,一个更好的解决办法是把你的DLL在单独的部件。然后你可以离开这个.exe文件元素,在同一组件则ServiceInstall元素。这使得这一切很干净。

如果您想要然后组合在一起的“服务”,您可以创建一个ComponentGroup元素,并把ComponentRefs的.exe和.dll组件。现在你有可以从功能/ ComponentGroupRef引用单个的事情。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top