2014-03-25 11 views
0

레지스트리 키 값을 추가하고 수정하는 Windows 서비스를 만들었습니다. Wix는 서비스를 성공적으로 설치 및 시작하지만 레지스트리 키를 수정하는 작업은 수행되지 않습니다. 수동으로 관리자 계정으로 서비스를 시작하면 서비스가 완벽하게 작동합니다. 시작> 관리 도구> 서비스로 이동하여 내 서비스를 마우스 오른쪽 단추로 클릭 한 다음 속성에서 로그온 탭을 클릭하고 관리자 계정과 암호를 입력 한 다음 서비스를 실행하고 추가하여 레지스트리 값을 성공적으로 수정하십시오. 하지만 wix 설치 프로그램을 사용하여 설치하면 성공적으로 설치되고 시작되지만 서비스가 레지스트리 키 값을 수정할 수 없습니다. 제대로 작동하려면 관리자 권한이 필요합니다.wix installer에서 Windows 서비스를 관리자로 시작하십시오.

<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" AdminImage="yes" InstallPrivileges="elevated" /> 

<Component Id ="MyServiceInstaller" Guid="{35FB6173-9484-48CA-BA86-30B0A68B301D}"> 
    <File Id="MyNewService.exe" Name="MyNewService.exe" Source="MyNewService.exe" Vital="yes" KeyPath="yes" DiskId="1"/> 
    <ServiceInstall 
     Id="ServiceInstaller" 
     Type="ownProcess" 
     Vital="yes" 
     Name="abcService" 
     DisplayName="abc Service" 
     Description="Monitoring and management service " 
     Start="auto" 
     Account="LocalMachine" 
     ErrorControl="ignore" 
     Interactive="no"> 
     </ServiceInstall> 
    <ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="AbcService" Wait="yes" /> 
    </Component> 

가이드 제발, 고맙습니다.

+0

관리는 Administrators 그룹의 일부인 유효한 Windows 사용자 이름입니까? ServiceInstall xml에도 암호를 입력 해 보셨습니까? –

+0

이상적인 세계에서 서비스는 레지스트리를 업데이트 할 수없는 이유를 어딘지보고합니다. 실제로 Admininistration 계정이라고 가정하면 비밀번호가 제공되지 않으면 작동하지 않습니다. 나는 자격 증명이 올바르지 않은 경우 설치 과정에서 서비스가 시작되지 않을 것으로 예상합니다. 이는 아마 수동으로 암호를 추가하는 이유 일 것입니다. – PhilDW

+0

@PhilDW 관리자가 올바르지 않습니다. 질문이 실제 값이 LocalMachine으로 수정되었습니다. 서비스가 수행중인 작업은 HKEY_CURRENT_USER \\ Software \\ Microsoft \\ Windows \ CurrentVersion \\ Internet Settings \ 키를 추가하고 수정하는 것입니다. 키를 수정하는 서비스 속성에 자격 증명을 설정하고 그렇지 않으면 키를 수정하지 않으며 wix 또는 서비스에 수동으로 자격 증명을 제공해서는 안되는 옵션이 있는지 확인합니다. 고맙습니다. – meraj

답변

0

서비스가 LocalSystem으로 실행 중입니까? (당신은 LocalMachine을 작성합니다.이 지식은 유효한 계정이 아닙니다.) HKCU 또는 HKLM에 글을 쓰려고하십니까? 세부 사항은 여기에 약간 명확하지 않습니다. proxy settings 또는 뭔가 작업 중입니까?

LocalSystem이 HKCU에 액세스 할 수는 없지만 HKLM의 어느 위치 에나 쓸 수 있어야합니다. impersonate the user해야한다고 생각합니다.

MSDN에서

는 "... LocalSystem 계정의 컨텍스트에서 실행되는 서비스는 SCM의 보안 컨텍스트를 상속 SID가 SECURITY_LOCAL_SYSTEM_RID 값에서 생성 된 사용자 계정은 로그인과 연결되어 있지 않습니다.. - 사용자 계정의 HKEY_CURRENT_USER 레지스트리 키는 현재 사용자이 아닌 기본 사용자입니다. 다른 사용자의 프로필에 액세스하려면 사용자를 가장하고 HKEY_CURRENT_USER에 액세스하십시오. "

0

로컬 시스템 계정으로 실행하고 HKCU 설정에 액세스 할 수 없습니다. 그것은 그렇게 작동하지 않습니다. 어떤 사용자의 HKCU 설정은 기계에 수십 가지가있을 수 있습니까? 실제 HKCU 레지스트리 키가있는 실제 사용자가 있기 때문에 실제 사용자의 자격 증명으로 실행하면 작동합니다. 서비스는 사용자의 자격 증명으로 실행하지 않는 한 특정 사용자의 컨텍스트에서 실행되지 않습니다. 해당 사용자의 레지스트리 하이브를 파악하려면 먼저 사용자의 SID를 알아야합니다.

+0

고맙습니다. 지금 내가하고있는 일은 고맙습니다. 모든 사용자의 sid가 변경되고 모든 사용자가 사용할 수있는 IE 프록시 설정 레지스트리 키를 변경하고 있습니다. 현재 로그인 한 사용자의 키를 변경해야합니다. 현재 로그인 할 수있는 방법이 있습니까? Windows 서비스를 통한 SID에서 서비스 코드를 얻으 려한다면이 S-1-5-21-2199884586-3455549055-2692760295-1000과 같은 것 대신 S-1-5-18을 제공하고 사용자 자격 증명에 대해 잘 모릅니다 이후 많은 PC에 설치하려고합니다. 제발 도와주세요. – meraj