Maison >développement back-end >C++ >Comment puis-je exécuter efficacement des fichiers batch en C# et dépanner les erreurs ExitCode 1 ?

Comment puis-je exécuter efficacement des fichiers batch en C# et dépanner les erreurs ExitCode 1 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-27 04:21:09630parcourir

How Can I Effectively Execute Batch Files in C# and Troubleshoot ExitCode 1 Errors?

Exécutez le fichier batch en C #

Effectuer des fichiers de lots en C # est généralement très simple, mais il peut rencontrer des difficultés dans certains cas. Lors de la rencontre d'un Exitcode 1 inconnu (généralement une erreur générale), la raison spécifique doit être étudiée.

Une méthode courante d'exécution des fichiers de lots est affichée dans le fragment de code suivant:

Cependant, dans certains cas, ce code peut ne pas avoir les résultats attendus. Pour l'exclusion de défaillance, le flux de sortie et d'erreur peut être capturé et le contenu peut être vérifié.
<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;

    Process = Process.Start(ProcessInfo);
    Process.WaitForExit();

    ExitCode = Process.ExitCode;
    Process.Close();

    MessageBox.Show("ExitCode: " + ExitCode.ToString(), "ExecuteCommand");
}</code>

En vérifiant le flux de sortie et d'erreur, le problème fondamental qui provoque une défaillance peut être déterminé.
<code class="language-csharp">static 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("output>>" + (String.IsNullOrEmpty(output) ? "(none)" : output));
    Console.WriteLine("error>>" + (String.IsNullOrEmpty(error) ? "(none)" : error));
    Console.WriteLine("ExitCode: " + exitCode.ToString(), "ExecuteCommand");
    process.Close();
}

static void Main()
{
    ExecuteCommand("echo testing");
}</code>

Autres précautions:

Lors de l'exécution de fichiers de lots dans le répertoire C: WindowsSystem32, certains paramètres de sécurité peuvent interférer avec une exécution correcte. Le déplacement du fichier batch vers d'autres positions peut résoudre ce problème.

Afin d'éviter les verrous morts, il est recommandé d'utiliser des méthodes asynchrones pour lire le flux de sortie et d'erreur. Cela peut être implémenté en utilisant le code suivant:

En suivant ces directives et en étudiant le flux de sortie et d'erreur, vous pouvez effectuer efficacement des fichiers batch en C # et résoudre tous les problèmes rencontrés.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn