2010-01-01 2 views
6

Win 7 및 VS2010 B2. 최소한의 웹 서버를 내장 된 HttpListener을 사용하여 작성하려고합니다. 그러나 AccessDenied 예외가 계속 발생합니다. 여기에 코드입니다 :HttpListener를 사용하려고 할 때 "AccessDenied"가 표시되는 이유는 무엇입니까?

int Run(string[] args) { 

     _server = new HttpListener(); 
     _server.Prefixes.Add("http://*:9669/"); 
     _server.Start(); 

     Console.WriteLine("Server bound to: {0}", _server.Prefixes.First()); 

     _server.BeginGetContext(HandleContext, null); 
    } 

가 나는 시스템 포트에 바인딩 된 경우 관리자 권한으로 실행할 필요가 이해할 수 있지만, 내 특수 권한이 ​​필요합니다 9669에 결합하는 이유는 표시되지 않습니다.

아이디어가 있으십니까? 이 SO 질문에

답변

23

감사합니다 : Can I listen on a port (using HttpListener or other .NET code) on Vista without requiring administrator priveleges?

나는 대답을 가지고있다.

netsh http add urlacl url=http://*:9669/ user=fak listen=yes

크레이지. 여기 내 수정 된 기능은 다음과 같습니다.

int Run(string[] args) { 

     var prefix = "http://*:9669/"; 
     var username = Environment.GetEnvironmentVariable("USERNAME"); 
     var userdomain = Environment.GetEnvironmentVariable("USERDOMAIN"); 

     _server = new HttpListener(); 
     _server.Prefixes.Add(prefix); 

     try { 
      _server.Start(); 
     } 
     catch (HttpListenerException ex) { 
      if (ex.ErrorCode == 5) { 
       Console.WriteLine("You need to run the following command:"); 
       Console.WriteLine(" netsh http add urlacl url={0} user={1}\\{2} listen=yes", 
        prefix, userdomain, username); 
       return -1; 
      } 
      else { 
       throw; 
      } 
     } 


     Console.WriteLine("Server bound to: {0}", _server.Prefixes.First()); 

     _server.BeginGetContext(HandleContext, null); 
    } 
+1

우리 모두에게 배워야 할 더 많은 보안 –

+0

정말 '듣기 = 예'가 필요합니다. 그것없이 나를 위해 일했다. 또한, 나는'http : // + : 9669 /'를 사용했다. –

관련 문제