現在、特定の名前の APP が IIS サーバーに存在するかどうかを確認するアプリケーションに取り組んでいます。このコマンドの実行には PsExec を使用します。
コマンド ラインでこれをテストしているときに、APP が存在しない場合、appcmd が ExitCode 1 で終了することに気付きました。同様に、APP が存在する場合は 0 で終了します。
この動作も使用したかったので、出力のリダイレクトを行う必要はありません。APPが存在するかどうかだけが気になります。PsExec は、呼び出すコマンドの終了コードを独自の終了コードとして使用します。コマンドラインでこれを試し、結果を確認したecho %errorlevel%
ところ、問題なく動作しました。
しかし、次のコードで問題が発生しました。
Process process = new Process();
process.StartInfo.FileName = @"psexec";
string appcmd = @"C:\windows\system32\inetsrv\appcmd";
process.StartInfo.Arguments = String.Format(@"{0} -u {1} -p {2} -S {3} LIST APP ""{4}""",
ip, username, password, appcmd, appname);
process.Start();
process.WaitForExit();
Console.WriteLine(process.ExitCode);
これは問題なく実行されます。しかし、それは PsExec (すべき?) が与える終了コードを返しません。常に 0 を返します。そのため、以前に見つけたトリックを使用して APP が存在するかどうかを確認することはできません。
これに対する既知の解決策はありますか?同様の解決策はありますか?または、出力リダイレクトを使用する必要がありますか?