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
Freigeben: 2025-01-27 04:38:08
Original
801 Leute haben es durchsucht

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:

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();
}
Nach dem Login kopieren

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

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();
}
Nach dem Login kopieren

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!

Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage