C# でバッチ ファイルを実行
C# では、Process
クラスを使用してバッチ ファイルを実行できます。ただし、バッチ ファイルが C:\Windows\System32
ディレクトリにある場合、実行が失敗し、一般エラーを示す ExitCode 1 が返されることがあります。
この問題を解決するには、ExecuteCommand()
関数の標準出力とエラー ストリームをリダイレクトします:
<code class="language-csharp">public void ExecuteCommand(string command) { int exitCode; ProcessStartInfo processInfo; Process process; processInfo = new ProcessStartInfo("cmd.exe", "/c " + command); processInfo.CreateNoWindow = true; processInfo.UseShellExecute = false; processInfo.RedirectStandardError = true; processInfo.RedirectStandardOutput = true; process = Process.Start(processInfo); process.WaitForExit(); string output = process.StandardOutput.ReadToEnd(); string error = process.StandardError.ReadToEnd(); exitCode = process.ExitCode; Console.WriteLine("输出>>" + (String.IsNullOrEmpty(output) ? "(无)" : output)); Console.WriteLine("错误>>" + (String.IsNullOrEmpty(error) ? "(无)" : error)); Console.WriteLine("ExitCode: " + exitCode.ToString()); process.Close(); }</code>
変更 1:
エラーが解決しない場合は、バッチ ファイルを System32
ディレクトリの外の別の場所に移動します。
変更 2:
ストリーム読み取り時の潜在的なデッドロックを回避するには、次のような非同期読み取りメソッドを実装します。
<code class="language-csharp">public void ExecuteCommand(string command) { int exitCode; ProcessStartInfo processInfo; Process process; processInfo = new ProcessStartInfo("cmd.exe", "/c " + command); processInfo.CreateNoWindow = true; processInfo.UseShellExecute = false; processInfo.RedirectStandardError = true; processInfo.RedirectStandardOutput = true; process = Process.Start(processInfo); process.OutputDataReceived += (object sender, DataReceivedEventArgs e) => Console.WriteLine("输出>>" + e.Data); process.BeginOutputReadLine(); process.ErrorDataReceived += (object sender, DataReceivedEventArgs e) => Console.WriteLine("错误>>" + e.Data); process.BeginErrorReadLine(); process.WaitForExit(); exitCode = process.ExitCode; Console.WriteLine("ExitCode: {0}", exitCode); process.Close(); }</code>
以上がC# でバッチ ファイルを適切に実行し、ExitCode 1 エラーを処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。