非管理员的HttpListenerException“访问被拒绝”

我编写了一个使用HttpListener监听HTTP请求的C#应用​​程序 – 显然! 我使用的命名空间前缀也使用netsh为当前用户注册(如SO上的每个人所建议的)。

问题是尽管使用netsh我的应用程序仍然会为非管理员用户抛出“访问被拒绝”例外。 操作系统是Windows 7。

更新:当我使用非管理员用户运行它时,好像我的应用程序没有执行netsh命令。 我的代码有问题吗? 没有exception抛出。

  AddAddress("http://localhost:8400/", Environment.UserDomainName, Environment.UserName); HttpListener _listener = new HttpListener(); _listener.Prefixes.Add("http://localhost:8400/"); _listener.Start(); ... /** method stolen from an SO thread. sorry can't remember the author **/ static void AddAddress(string address, string domain, string user) { string args = string.Format(@"http add urlacl url={0}", address) + " user=\"" + domain + "\\" + user + "\""; ProcessStartInfo psi = new ProcessStartInfo("netsh", args); psi.Verb = "runas"; psi.CreateNoWindow = true; psi.WindowStyle = ProcessWindowStyle.Hidden; psi.UseShellExecute = true; Process.Start(psi).WaitForExit(); } 

我在做HttpListener时使用的行是:

 netsh http add urlacl url=http://+:8008/ user=Everyone listen=yes 

用户可以是单个用户或用户组。 因此,如果您只希望管理员具有访问权限,例如:

 netsh http add urlacl url=http://+:8008/ user=Administrators listen=yes 

您可以获得有关命令的帮助:

 netsh http add urlacl help 

请注意, url=是可选的。 此外,该命令的旧版本对listen参数要求true或false。 当前版本使用是或否。