ホームページ >バックエンド開発 >C++ >C# でバッチ ファイルを適切に実行し、ExitCode 1 エラーを処理する方法

C# でバッチ ファイルを適切に実行し、ExitCode 1 エラーを処理する方法

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-27 04:38:08762ブラウズ

How to Properly Execute Batch Files in C# and Handle ExitCode 1 Errors?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。