Maison > développement back-end > C++ > Comment puis-je exécuter avec succès des fichiers batch en C# et gérer les erreurs potentielles ?

Comment puis-je exécuter avec succès des fichiers batch en C# et gérer les erreurs potentielles ?

Mary-Kate Olsen
Libérer: 2025-01-27 04:26:08
original
269 Les gens l'ont consulté

How Can I Successfully Execute Batch Files in C# and Handle Potential Errors?

Un guide complet sur l'exécution de fichiers batch en C# et la gestion des erreurs potentielles

Lors du traitement de fichiers batch en C#, les développeurs rencontrent souvent le problème de l'échec d'exécution. Cet article vise à résoudre les problèmes courants et à fournir des conseils sur l’exécution efficace des fichiers batch.

Le problème

Comme l'utilisateur l'a mentionné, l'exécution du fichier batch à l'aide de l'extrait de code fourni entraîne un ExitCode de 1, indiquant qu'une erreur générique s'est produite. Le problème réside dans la manière dont la chaîne de commande est transmise au fichier batch.

Solution

Pour résoudre ce problème, notez que la chaîne de commande doit contenir le chemin complet du fichier batch, pas seulement son nom. De plus, il est recommandé de rediriger les flux de sortie standard et d’erreurs du processus pour récupérer les messages ou erreurs générés lors de l’exécution.

Méthode de synchronisation :

<code class="language-csharp">static void ExecuteCommand(string command)
{
    int exitCode;
    ProcessStartInfo processInfo;
    Process process;

    // 指定批处理文件的完整路径
    processInfo = new ProcessStartInfo(@"C:\Windows\System32\txtmanipulator.bat", 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>
Copier après la connexion

Méthode asynchrone (pour éviter les blocages) :

<code class="language-csharp">static void ExecuteCommand(string command)
{
    var processInfo = new ProcessStartInfo("cmd.exe", "/c " + command); // 使用cmd.exe执行,更稳妥
    processInfo.CreateNoWindow = true;
    processInfo.UseShellExecute = false;
    processInfo.RedirectStandardError = true;
    processInfo.RedirectStandardOutput = true;

    var process = Process.Start(processInfo);

    process.OutputDataReceived += (sender, e) => Console.WriteLine("输出>>" + e.Data);
    process.BeginOutputReadLine();

    process.ErrorDataReceived += (sender, e) => Console.WriteLine("错误>>" + e.Data);
    process.BeginErrorReadLine();

    process.WaitForExit();

    Console.WriteLine("ExitCode: {0}", process.ExitCode);
    process.Close();
}</code>
Copier après la connexion

Autres notes

Si le fichier batch se trouve dans un répertoire différent de celui de l'exécutable, vous devez fournir son chemin complet dans la chaîne de commande. Pour des raisons de sécurité, il n'est pas recommandé d'enregistrer des fichiers batch personnalisés ou des fichiers exécutables dans les répertoires Windows. Il est recommandé d'utiliser @"C:pathtoyourfile.bat" pour spécifier le chemin afin d'éviter les problèmes d'échappement de barre oblique inverse. La méthode asynchrone de lecture du flux est plus recommandée car elle évite les problèmes potentiels de blocage. Utiliser cmd.exe /c pour exécuter un fichier batch est plus fiable que de démarrer directement le fichier batch et peut mieux gérer diverses situations.

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal