質問

私のアプリケーションは、小さなWebサーバーを使用していくつかのファイルをサーバーし、管理用のWebインターフェイスをリモートで持っています。今、ユーザーはNetSHを使用してURIを登録する必要があります。

netsh http add urlacl url=http://+:1233/ user=Chris-PC\Chris

これは平均的なユーザーにとって楽しいことではありません。エンドユーザーがコマンドプロンプトを使用する必要なく、プログラムからユーザーが指定したポートでプログラムをリッスンできるようにしたいと思います。とにかく、Process.startと実行中のコマンドプロンプトを自分で使用するだけでこれを達成するためにありますか?

役に立ちましたか?

解決

私はこれを書いてパーマを高め、HTTP ACLエントリを追加します netsh.

ユーザーはシステムの上に変更を加えるように求められますが、それは何もないよりはましです。あなたはこれに応じてこれをしたいかもしれません addressAccessDenIedException

public static class NetAclChecker
{
    public static void AddAddress(string address)
    {
        AddAddress(address, Environment.UserDomainName, Environment.UserName);
    }

    public static void AddAddress(string address, string domain, string user)
    {
        string args = string.Format(@"http add urlacl url={0} user={1}\{2}", address, 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を使用している場合は、httpconfig.exeまたはnetshを使用してhttplistenerを構成する必要があります。

A. afaik c#からこれを行うためのAPIはありません。コマンドラインツールのみ

B.デフォルトでは、システムまたはローカル管理者グループのみがHTTPプレフィックスを聞くことができます

したがって...アプリがユーザーのアカウントの下で実行されている場合、httphandlerがhttp.sysを使用して実行中のWebサーバーとポートを共有するため(httpcfg.exeまたはnetshを使用)、アクセスを明示的に付与する必要があります(したがって、独自にホストできますポート80のWebアプリは、IISがポート80でも実行されています)。

より良い解決策は、実際の埋め込みWebサーバーを使用して、必要なポートでリッスンすることです。別のアプリケーション(IISなど)が既にポートを使用している場合、これは機能しませんが、これはポート共有にはHTTP.SYSを使用していないため、ポートでユーザーアカウントが開く /リスニングしているものについてセキュリティ制限はありません。ユーザーに独自のポートを指定してもらいたいため、ポート80以外のポートで実行することは許容できるようです。

私の会社は、Neokernel Webサーバーと呼ばれる商用製品を製造しています(http://www.neokernel.com)ASP.NETを実行し、プログラムでサーバーを起動/停止し、構成を設定できます。このアセンブリをアプリケーションに埋め込み、配布できます。

また、変更して埋め込むことができるCassiniソースコードもありますが、無料ですが、ロギングやSSLのサポートなどの欠点があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top