アプリケーションと一緒に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を実行し、コンソールウィンドウを非表示にする方法はないようです。
任意の提案をいただければ幸いです。