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