C#のProcess.StartでUseShellExecuteをfalseに指定した時の問題の解決方法
Process.Start の UseShellExecute プロパティを false にすると、Process.Start は指定された実行ファイルを起動する新しいプロセスを開始しますが、オペレーティングシステムのシェルを使用して実行しません。これにより、いくつかの問題が発生する可能性があります。以下はその解決策です。
- UseShellExecuteプロパティをfalseに設定する場合、WorkingDirectoryプロパティを設定することで、プロセスの作業ディレクトリを指定できます。
Process process = new Process();
process.StartInfo.FileName = "your_executable_file_path";
process.StartInfo.UseShellExecute = false;
process.StartInfo.WorkingDirectory = "your_working_directory";
process.Start();
- RedirectStandardOutputとRedirectStandardErrorプロパティを設定する:UseShellExecute=falseの場合、Process.Startメソッドでプロセスを開始すると、StandardOutputおよびStandardErrorプロパティを使用して、プロセスの出力とエラーを読み取ることができません。出力とエラーストリームをリダイレクトするには、RedirectStandardOutputおよびRedirectStandardErrorプロパティを設定します。
Process process = new Process();
process.StartInfo.FileName = "your_executable_file_path";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.Start();
string output = process.StandardOutput.ReadToEnd();
string error = process.StandardError.ReadToEnd();
process.WaitForExit();
- UseShellexecute = false の場合、デフォルトでは、新しいプロセスのウィンドウが表示されませんので、ウィンドウを表示するには CreateNoWindow プロパティを false に設定します。
Process process = new Process();
process.StartInfo.FileName = "your_executable_file_path";
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = false;
process.Start();
特定の状況に応じて最も適切なものを決定することは役立つ場合があります。