Как мне установить службу с некоторыми дополнительными файлами в WiX и определить, какой файл является фактическим файлом EXE службы?
Сценарий: у меня была служба, представляющая собой всего лишь один EXE-файл, и я установил ее как службу Windows NT в WiX с помощью этого кода:
<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 и просто сослаться на этот EXE-файл службы с помощью FileRef, но этого, похоже, не существует (по крайней мере, в 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-файл (а не просто произвольный файл из списка файлов компонента) ??
Марк