2009-08-12 2 views
5

WiX에 몇 가지 추가 파일이있는 서비스를 설치하고 실제 서비스 EXE 파일을 정의하려면 어떻게해야합니까?WiX (2.0)를 사용하여 다중 파일 NT 서비스 설치

시나리오 : 난 그냥 하나의 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" /> 
    <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> 

하지만 내 "프레임 워크 :

는 난 그냥이 구성 요소에 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" /> 
</Component> 

먼저 내 모든 파일과 구성 요소를 가지고 노력했다. 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> 

그래서 - 파일의 구성 요소의 목록에서 올바른 EXE 파일 (뿐만 아니라 임의의 파일을 선택하기 위해 NT 서비스 설치에 필요한 모든 파일을 설치하고, 여전히 얻을 않는 가난한 윅스 저자 꼭 무엇인가) ??

마크

+1

File 요소의 exe에 KeyPath = 'yes'를 설정하는 것을 잊었습니다. –

+0

고마워요, 셰이 - 롭의 대답이 진술을 확인하는 것 같습니다 - 크게 감사드립니다! –

답변

7

ServiceInstall 요소는 구성 요소의 "키 패스"에 ServiceInstall 가리키는 끝날는에 있습니다. 기본적으로 윅스 도구 세트는 키 패스와 같은 구성 요소의 첫 번째 파일 또는 RegistryKey 요소를 선택합니다. 구성 요소에 파일을 추가하면 목록 맨 위에있는 .dll이 KeyPath가됩니다.

일반적으로 작은 부품은 큰 부품보다 낫습니다. 따라서 더 나은 솔루션은 별도의 구성 요소에 DLL을 배치하는 것입니다. 그런 다음 .exe File 요소와 ServiceInstall 요소를 같은 Component에 남겨 둘 수 있습니다. 그것은 모든 것을 매우 깨끗하게합니다.

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

+0

+1 큰 설명 - 고마워요, 롭! 그에 따라 WiX 스크립트를 변경했으며 야간 빌드가 실행되고 설치가 테스트 된 후 내일 다시보고 할 것입니다 :-) –

+0

예 - "KeyPath = 'yes'"를 추가하여 내 문제가 해결됨 - 설치가 다시 작동 함 그냥 괜찮아요. 고마워요, 롭! –

관련 문제