22

HttpListener我已经编写了一个用于监听 HTTP 请求的 C# 应用程序- 很明显!我使用的命名空间前缀也是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();
    }
4

1 回答 1

42

我在做 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 的 listen 参数。当前版本使用是或否。

于 2013-02-20T05:04:43.753 回答