安装使用维克斯多文件NT服务(2.0)
-
13-09-2019 - |
题
如何安装服务在维克斯一些其他文件,并确定哪些文件是实际的服务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引用单个的事情。