HttpListener
を使用してHTTPリクエストをリッスンするC#アプリケーションを作成しました。私が使用する名前空間接頭辞も、現在のユーザーに対してnetsh
を使用して登録されています(SOの全員が推奨)。
問題は、netshを使用しているにもかかわらず、管理者以外のユーザーに対して、アプリケーションが「アクセスが拒否されました」という例外をスローすることです。 OSは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();
}
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を使用しています。