2009-09-28 5 views
9

WiX를 사용하여 Windows 서비스를 설치합니다. 설치 프로그램을 실행하는 Windows 사용자의 컨텍스트에서 서비스를 실행하려면 어떻게해야합니까?WiX ServiceInstall - 현재 Windows 사용자로 실행되도록 서비스 설정

+0

왜 서비스를 현재 사용자로 실행 하시겠습니까? 서비스의 요점은 로그온 한 사용자가 없을 때 실행할 수 있고 실행 파일에 대한 관리자 권한을 용이하게하기 위해 LocalSystem으로 실행할 수 있어야한다는 것입니다. 나는 당신이 좋은 이유가 있다고 확신한다 ... –

+2

당신이 특정 사용자로서 그것을 실행할 수있는 한 가지 이유는 SQL 서버에 연결이 필요하고 SQL 서버가 Windows 인증을 사용하도록 구성되었다는 것입니다. "로컬 서비스"를 SQL 사용자 목록에 추가하십시오. –

답변

21

서비스를 실행하려는 사용자의 계정 이름과 암호가 모두 필요합니다. 설치 프로그램에 사용자 이름과 암호를 묻는 사용자 지정 UI를 추가 한 다음 ServiceInsall 요소의 계정 및 암호 특성에 대해 제공된 값을 사용하여이 작업을 수행 할 수있었습니다.

서비스 실행에 사용 된 계정에는 서비스로 로그온 권한이 있어야합니다. 이것은 기본적으로 사용자에게 부여되지 않습니다. UtilExtension 스키마의 User 요소를 사용하여이 priveledge를 사용자에게 추가 할 수있었습니다. 사용자에게 권한을 추가하는 것은 설치 프로그램을 실행하는 사용자가 관리자 인 경우에만 성공합니다.

다음은 내가 사용한 코드입니다. SERVICECREDENTIALS_USERLOGIN 및 SERVICECREDENTIALS_PASSWORD는 사용자 지정 UI에서 채워진 속성입니다.

<Component Id="ServiceEXE" Guid="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"> 
    <File Id="ServiceEXE" Name="YourService.exe" DiskId="1" 
     Source="path\to\YourService.exe" KeyPath="yes" /> 
    <util:User Id="UpdateUserLogonAsService" UpdateIfExists="yes" CreateUser="no" Name="[SERVICECREDENTIALS_USERLOGIN]" 
      LogonAsService="yes" /> 
    <ServiceInstall Id="ServiceInstall" Type="ownProcess" Vital="yes" Name="YourService" 
        DisplayName="Your Service" Description="Your Service description" 
        Start="auto" Account="[SERVICECREDENTIALS_USERLOGIN]" Password="[SERVICECREDENTIALS_PASSWORD]" 
        ErrorControl="normal" Interactive="no" /> 
    <ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="YourService" Wait="yes" /> 
</Component> 
+0

당신은 내가 SQL 인증을위한 2 가지 구성 요소와 Windows 인증을위한 1 가지 조건, 즉 조건을 추가하는 방법을 어떻게 가질 수 있는지 알려줄 수 있습니까? –

+0

이 코드는 전혀 작동합니까? LogonAsService 권한 * 및 *을 설정하면 결과 .msi 패키지에서 순차적으로 예약되지 않습니다. 이런 이유로 설치가 실패합니다 ... 아니면 뭔가 빠졌습니까? –

관련 문제