HttpListenerException "доступ запрещен" для не-админов

Я написал приложение С#, которое использует 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();
    }

Ответы

Ответ 1

Линия, которую я использую, когда я делаю 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. Текущие версии используют да или нет.