문제

WiX에서 일부 추가 파일과 함께 서비스를 설치하고 실제 서비스 EXE 파일이 무엇인지 정의하려면 어떻게 해야 합니까?

대본:단일 EXE 파일인 서비스가 있었고 다음 코드를 사용하여 WiX에 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 서비스 설치를 통해 올바른 EXE 파일(구성 요소의 파일 목록에 있는 임의의 파일뿐만 아니라)을 선택하려면 어떻게 해야 합니까??

마크

도움이 되었습니까?

해결책

ServiceInstall 요소는 ServiceInstall이 있는 구성 요소의 "KeyPath"를 가리키게 됩니다.기본적으로 WiX 도구 세트는 구성 요소의 첫 번째 File 또는 RegistryKey 요소를 KeyPath로 선택합니다.구성 요소에 파일을 추가하면 목록 맨 위에 있는 .dll이 KeyPath가 됩니다.

일반적으로 작은 구성요소가 큰 구성요소보다 좋습니다.따라서 더 나은 해결책은 DLL을 별도의 구성 요소에 배치하는 것입니다.그런 다음 .exe 파일 요소와 ServiceInstall 요소를 동일한 구성 요소에 그대로 둘 수 있습니다.그러면 모든 것이 매우 깨끗해집니다.

그런 다음 "서비스"를 함께 그룹화하려면 ComponentGroup 요소를 만들고 ComponentRefs를 .exe 및 .dll 구성 요소에 넣을 수 있습니다.이제 Feature/ComponentGroupRef에서 참조할 수 있는 항목이 하나 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top