AddressAccessDeniedException: разрешить без netsh?
Я столкнулся с исключением AddressAccessDeniedException
потому что мой процесс не имеет права регистрировать URL. Я сначала запустил мою программу как администратор: хорошо, это работало.
Но теперь я хочу распространять свое приложение, и я бы хотел, чтобы каждый пользователь мог запускать его, не будучи администратором.
Есть ли способ автоматически предоставить доступ пользователю?
Я видел команду:
netsh http add urlacl url=http://+:8000/ user=DOMAIN\UserName
Должен ли я использовать это? Если да, то как?
То, что я хотел бы сделать, это предоставить доступ, не будучи администратором... сказал, что это кажется глупым, но может быть...
1 ответ
Это невозможно. Windows использует драйвер ядра для обработки HTTP-запросов, и открытие слушателей на этом драйвере обеспечивается ACL (списком контроля доступа). Если вы хотите открыть прослушиватель, чтобы ваше приложение могло прослушивать запросы от других компьютеров, вы должны либо запустить его от имени администратора, чтобы передать ACL, либо у вас должны быть разрешения (= вы должны быть в ACL). Вы также можете отключить UAC (контроль доступа пользователей), чтобы обойти эти проверки.
netsh
это инструмент, позволяющий настроить ACL для HTTP.sys (драйвер ядра) Вы можете дать разрешения любому пользователю прослушивать выбранный порт, но, очевидно, вы должны быть администратором, чтобы предоставить эти разрешения, или у вас должны быть разрешения для делегирования прав для уже настроенных разрешений, в противном случае весь смысл этой безопасности исчезнет.
Добавьте это netsh
вызовите ваш установочный пакет и потребуйте, чтобы установка была выполнена от имени администратора (что довольно часто встречается во многих приложениях). Также имейте в виду, что netsh работает только в Windows Vista, Windows 7, Windows Server 2008 и Windows Server 2008 R2. Для Windows 2003 и Windows XP (требуется как минимум SP2) вам нужен еще один инструмент под названием httpcfg
который не является частью установки ОС (он должен быть установлен отдельно).