web-dev-qa-db-ja.com

非管理者アカウントでの自己ホストOWIN Web APIの実行

自己ホストのOWIN Web APIを非管理者アカウントで実行することはできますか?私はすでに数十のURL予約を試みましたが、何も機能しません。サービスは「アクセスが拒否されました」で開始に失敗します。アカウントが管理者ロールに追加されたときに機能しますが、それは望ましくありません。以下のコードは、Win 7フレームワーク4.5.2で実行されています。

//install-package Microsoft.owin.hosting
//install-package Microsoft.Owin.Host.HttpListener

StartOptions options = new StartOptions();
options.Urls.Add("http://localhost:5000/");
//options.Urls.Add(string.Format("http://{0}:5000", Environment.MachineName));
//options.Urls.Add("http://+:5000/");
//options.Urls.Add("http://*:5000/");

using (WebApp.Start<WebAPISelfHostMinimal.Startup>(options))
{
    while (!Terminate)
    {
        await Task.Delay(10); //keep cpu from getting pegged
    }

    LogUtil.LogInfo("Terminating owin Host.");
}

[〜#〜] edit [〜#〜]-これはWindowsアカウントで実行されています。

C:\>netsh http add urlacl http://+:5000/ user=mini2012\svcAPI

URL reservation successfully added

C:\>sc start apiservice
[SC] StartService FAILED 5:

Access is denied.

C:\>netsh http add urlacl http://*:5000/ user=mini2012\svcAPI

URL reservation successfully added

C:\>sc start apiservice
[SC] StartService FAILED 5:

Access is denied.

C:\>netsh http add urlacl http://localhost:5000/ user=mini2012\svcAPI

URL reservation successfully added

C:\>sc start apiservice
[SC] StartService FAILED 5:

Access is denied.
39
Colin Superdog

問題はURL予約にあったようです。必要ありませんでした。 URLの予約がある場合、owinホストがアクセス拒否エラーで開始するのを防ぐだけです。また、owinホストのデフォルトポートは5000です。そのポートでまだ実行中の「デッド」プロセスがある場合、サービスの開始がブロックされます。確認するには、コマンドプロンプトでnetstat -a -bを実行します。

17
Colin Superdog

サービスは(ほとんどの場合)LocalSystem(SYSTEM)アカウントで実行されています。このアカウントはEveryoneセキュリティプリンシパルにはありません。

つまり、これを解決するには、匿名ログオン用に名前空間を予約するか、Everyoneプリンシパルにあるネットワークサービスアカウントで実行するようにサービスを変更します。

3番目のオプションは、もちろん、新しいローカル/ドメインユーザーを作成し、その予約を作成し、このアカウントでサービスを実行することです。ただし、適切なセキュリティアクセス許可を設定する必要があるため、最初の2つのオプションのいずれかを使用します。

5
Marcel N.

解決策を探していて、テキストを読んでいない人のために。

解決策は、管理者としてVisual Studioを実行することです。

2
Mo D Genesis

Adminでこのコマンドラインを実行します

netsh http add urlacl url = http:// *:8080/user = MyUser

0
Sergii Lebid