22

HttpListenerHTTP リクエストをリッスンするために使用する C# アプリケーションを作成しました。私が使用する名前空間プレフィックスは、現在のユーザーを使用netshして登録されています(SOの全員が提案したように)。

問題は、netsh を使用しているにもかかわらず、アプリケーションが管理者以外のユーザーに対して「アクセスが拒否されました」という例外をスローすることです。OSはWindows7です。

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=はオプションであることに注意してください。また、古いバージョンのコマンドでは、listen パラメーターに true または false が必要です。現在のバージョンでは、yes または no が使用されます。

于 2013-02-20T05:04:43.753 に答える