HttpListenerException”;访问被拒绝”;对于非管理员

本文关键字:于非 管理员 访问 HttpListenerException 拒绝 | 更新日期: 2023-09-27 18:00:12

我已经编写了一个C#应用程序,它使用HttpListener来侦听HTTP请求——显然!我使用的名称空间前缀也使用netsh为当前用户注册(正如SO上的每个人所建议的那样)。

问题是,尽管使用netsh,我的应用程序仍然会为非管理员用户抛出"拒绝访问"异常。操作系统是Windows 7。

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

    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();
    }

HttpListenerException”;访问被拒绝”;对于非管理员

我在执行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=是可选的。此外,该命令的旧版本要求侦听参数为true或false。当前版本使用是或否。