Heim >Backend-Entwicklung >C++ >Wie kann ich Stapeldateien in C# ordnungsgemäß ausführen und ExitCode 1 -Fehler behandeln?

Wie kann ich Stapeldateien in C# ordnungsgemäß ausführen und ExitCode 1 -Fehler behandeln?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-27 04:38:08762Durchsuche

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

Batchdatei in C# ausführen

In C# können Sie die Klasse Process verwenden, um Batchdateien auszuführen. Wenn sich die Batchdatei jedoch im Verzeichnis C:\Windows\System32 befindet, schlägt die Ausführung möglicherweise fehl und gibt ExitCode 1 zurück, was auf einen allgemeinen Fehler hinweist.

Um dieses Problem zu beheben, leiten Sie die Standardausgabe- und Fehlerströme in der Funktion ExecuteCommand() um:

<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>

Änderung 1:

Wenn der Fehler weiterhin besteht, verschieben Sie die Batchdatei an einen anderen Speicherort außerhalb des Verzeichnisses System32.

Änderung 2:

Um mögliche Deadlocks beim Lesen des Streams zu vermeiden, implementieren Sie eine asynchrone Lesemethode wie diese:

<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>

Das obige ist der detaillierte Inhalt vonWie kann ich Stapeldateien in C# ordnungsgemäß ausführen und ExitCode 1 -Fehler behandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn