11

アプリケーションと一緒にIISExpressを配布しようとしています。IIS Expressは、ポート80で外部Web要求を処理します。

IIS Expressの実行と外部要求の処理に問題はありませんが、Microsoftは無限の知恵を持って、コンソールウィンドウとシステムトレイアイテムからIISExpressを実行することにしました。コマンドライン引数でトレイアイテムを無効にすることはできますが、コンソールウィンドウでは無効にできません。

コンソールウィンドウを表示せずにIISExpressを実行したい。また、WindowsサービスからIISExpressを実行したいと思います。

アプリケーション内から次のコードを実行すると、まさに私が望むことを実行できます。

    Directory.SetCurrentDirectory(string.Format("{0}\\IIS Express", iisProgramDirectory));
    process.EnableRaisingEvents = true;
    //process.Exited += new EventHandler(process_Exited);
    process.StartInfo.FileName = "iisexpress.exe";
    process.StartInfo.Arguments = string.Format("\"/config:{0}webservice\\config\\applicationhost.config\"", dataDirectory);
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.RedirectStandardOutput = true;
    process.StartInfo.RedirectStandardError = true;
    process.StartInfo.CreateNoWindow = true;
    process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    //process.StartInfo.UserName = "Administrator";
    //System.Security.SecureString securePwd = new System.Security.SecureString();
    //string password = "**********";
    //char[] pword = password.ToCharArray();
    //for (int i = 0; i < pword.Length; i++)
    //{
    //  securePwd.AppendChar(pword[i]);
    //}
    //process.StartInfo.Password = securePwd;
    process.Start();

明らかに、私は管理者として実行しています。IIS Expressは、外部要求を処理し、ポート80でリッスンするために、管理者権限で実行する必要があるようです。

私のWindowsサービスは完全な特権を持っていると思うWindowsサービスアカウントで実行されますが、Windowsサービスから実行しようとすると、IISExpressプロセスはエラーコード0で正常に終了します。

いくつかのシナリオを試しましたが(コードスニペットからわかるように)、Windowsサービスを使用してIIS Expressを実行し、コンソールウィンドウを非表示にする方法はないようです。

任意の提案をいただければ幸いです。

4

6 に答える 6

7

次のような答え:string IIS_EXPRESS = @ "C:\ Program Files \ IIS Express \ iisexpress.exe";

    StringBuilder arguments = new StringBuilder();
    arguments.Append(@"/path:");
    arguments.Append(@"C:\Inetpub\wwwroot\ClientSyncService");
    arguments.Append(@" /Port:2000");
    Process process = Process.Start(new ProcessStartInfo()
        {
            FileName = IIS_EXPRESS,
            Arguments = arguments.ToString(),
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = true
        });

ただし、機能するはずですが、サービスのIDにACLを付与して、ポート80の所有権を取得できるようにする必要があります。つまり、セットアッププログラム中に(昇格して実行されるMSIがあると仮定して)、次のようなコマンドラインを実行します:netsh http add urlacl url = http:// WhateverMachineName:80 / user = everyone

ここで、「全員」を、サービスが実行される特定のアカウントだけに制限できます。これを行うと、IIS Expressは、管理者権限を必要とせずに正常に起動できるはずです。

于 2011-04-06T05:42:59.580 に答える
3

管理者としてIIS7.5を実行するには、コードを次のように少し変更します。

Process process = Process.Start(new ProcessStartInfo()
{
    FileName = IIS_EXPRESS,
    Arguments = arguments.ToString(),
    RedirectStandardOutput = true,
    UseShellExecute = true,
    CreateNoWindow = true,
    Verb = "runas"
});

これにより、ポート80でサイトを実行することもできます。

于 2012-08-10T09:58:14.623 に答える
2

これを試して。私たちは同じ状況にあり、これはうまくいきました。これはあなたを助けるかもしれません。

これは、管理者権限を必要としないIISExpress7.5の場合です。

string IIS_EXPRESS = @"C:\Program Files\IIS Express\iisexpress.exe";

StringBuilder arguments = new StringBuilder();
arguments.Append(@"/path:");
arguments.Append(@"C:\Inetpub\wwwroot\ClientSyncService");
arguments.Append(@" /Port:2000");
Process process = Process.Start(new ProcessStartInfo()
{
    FileName = IIS_EXPRESS,
    Arguments = arguments.ToString(),
    RedirectStandardOutput = true,
    UseShellExecute = false,
    CreateNoWindow = true
});
于 2011-02-18T17:01:50.610 に答える
0

iis.netフォーラムでも同様の質問(コンソールウィンドウなしでiisexpressを実行)がありました。http://forums.iis.net/p/1175262/1970513.aspx#1970513をご覧ください。

于 2011-02-08T17:43:58.440 に答える
0

これは古い投稿ですが、MicrosoftのSRVANY Service Wrapperを検討しましたか?

これは、Windowsサービスとして(任意の資格情報の下で)インストールおよび実行され、Windowsレスプロセスでプロセスを起動します。

コマンドライン(または[スタート/実行]ウィンドウ)から実行できるものはすべて、SRVANYを介してサービスとして実行できます。

素敵な記事: http ://www.tacktech.com/display.cfm?ttid = 197

于 2013-06-26T20:33:38.957 に答える
-1

ポート80も使用したい場合は、これを行うことはできません。

于 2011-06-28T03:13:20.160 に答える