2010-03-26 2 views
13

msi 설치 프로그램 패키지로 배포하려는 자체 호스팅 WCF 서비스 응용 프로그램이 있습니다. 나는 HTTP를 편집 할WCF 자체 호스팅 서비스, 설치 관리자 클래스 및 netsh

"netsh http add urlacl url=http://+:8888/ user=\Everyone" 

을 : 엔드 포인트는 내가 netsh를 사용하여 HTTP 설정을 편집 관리자 권한으로 프로그램을 실행하거나 가지고 중 하나가 설치 후 2008 창에서 프로젝트를 시동하기 위해 HTTP 포트 8888을 사용합니다 내 설치 관리자 클래스의 설정. 따라서 내가 설치() 메소드에서 다음 메소드를 호출

public void ModifyHttpSettings() 
    { 
     string parameter = @"http add urlacl url=http://+:8888/ user=\Everyone"; 

     System.Diagnostics.ProcessStartInfo psi = 
      new System.Diagnostics.ProcessStartInfo("netsh", parameter); 

     psi.Verb = "runas"; 
     psi.RedirectStandardOutput = false; 
     psi.CreateNoWindow = true; 
     psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
     psi.UseShellExecute = false; 
     System.Diagnostics.Process.Start(psi); 
    } 

이 방법은 지역화 된 버전없는 윈도우의 영어 버전 작동하지만 것이다 (그룹 모두가 지역화 된 버전의 다른 이름이있다). 또한 현재 로그온 한 사용자에 대해 최소한의 액세스를 허용하기 위해 Environment.UserName을 사용하려고했습니다. 그러나 설치 관리자 클래스가 SYSTEM 사용자로 실행되는 msi 서비스에 의해 실행되기 때문에 이는 또한 작동하지 않습니다. 그러므로 Enviroment.UserName은 SYSTEM을 반환하고 그것은 내가 원하는 것이 아닙니다.

msi 설치 관리자 클래스에서 자체 호스팅 된 WCF 서비스에 대한 모든 사용자 (또는 현재 로그온 한 사용자)에게 액세스 권한을 부여 할 수있는 방법이 있습니까? 솔루션에

답변

24

내 aproach :

public void ModifyHttpSettings() 
    { 
     string everyone = new System.Security.Principal.SecurityIdentifier(
      "S-1-1-0").Translate(typeof(System.Security.Principal.NTAccount)).ToString(); 

     string parameter = @"http add urlacl url=http://+:8888/ user=\" + everyone; 

     ProcessStartInfo psi = new ProcessStartInfo("netsh", parameter); 

     psi.Verb = "runas"; 
     psi.RedirectStandardOutput = false; 
     psi.CreateNoWindow = true; 
     psi.WindowStyle = ProcessWindowStyle.Hidden; 
     psi.UseShellExecute = false; 
     Process.Start(psi); 
    } 

SID를 "S-1-1-0"는 잘 알려진 SID하고 "모두"계정을 의미합니다. SID는 모든 Windows의 현지화에 대해 동일합니다. 메서드의 SecurityIdentifier 클래스는 Everyone 계정의 지역화 된 이름을 반환합니다.

+0

감사합니다. 내 시간을 저장했습니다. – Butsaty

+0

@kevinc 사용자가 \를 언급하는 경우, @가 축 어적으로 사용하기 때문에 그렇지 않습니다. – Eternal21

관련 문제