web-dev-qa-db-fra.com

Comment exécuter un fichier .bat à partir d'une application de formulaire Windows C #?

Ce que je dois faire, c'est qu'une application de l'interface graphique C # 2005 appelle un fichier .bat et plusieurs fichiers VBScript à la demande de l'utilisateur. Ceci est juste une solution provisoire jusqu'à la fin des vacances et je peux tout écrire en C #. Je peux exécuter les fichiers VBScript sans problème, mais je ne parviens pas à exécuter le fichier .bat. Lorsque je "clique" dans l'application C # pour exécuter le fichier .bat, une fenêtre DOS s'ouvre et se ferme très rapidement et le fichier .bat de test ne s'exécute pas - "Windows ne reconnaît pas bat comme une commande interne ou externe". retourné dans la boîte DOS. Si je double-clique simplement sur le fichier .bat ou l’exécute manuellement à partir de la commande Invite, il s’exécute. J'ai également besoin que le fichier .bat s'exécute en silence, sauf si une interaction de l'utilisateur est requise - ce script copie 11k + fichiers dans des dossiers sur une machine en réseau et parfois Windows "oublie" si la destination est un fichier ou un répertoire et demande à l'utilisateur de l'informer qu'est-ce que c'est (c'est une toute autre question qui n'est pas à discuter ici ... inutile de dire que cela m'agace).

Jusqu'ici dans ma source C #, j'ai ceci:

Process scriptProc = new Process();


        if (File.Exists("c:\\scripts\\batchfile1.bat"))
        {

            scriptProc.StartInfo.FileName = @"cscript";
            scriptProc.StartInfo.Arguments = ("cmd.exe", "/C C:\\scripts\\batchfile1.bat"); // Wacky psuedo code //
            scriptProc.Start();
            scriptProc.WaitForExit(1500000);
            scriptProc.Close();

        }

        if (!File.Exists("c:\\scripts\\batchfile1.bat"))
        {
        }

Je suis conscient que ce code ne fonctionne pas - mais c'est essentiellement ce que je veux qu'il fasse. Ce que je regarde est quelque chose comme ceci pour les fichiers .bat. Je suppose que je dois dire au système d'utiliser cmd pour exécuter le fichier .bat. Je ne sais pas comment faire cela. J'ai vérifié ce site qui est pour C # 2003. Pas beaucoup d'aide pour moi car je suis très vert avec C #. 

EDIT: En utilisant le message de Kevin, j'ai encore essayé. Même script de solution de ce post mais modifié pour moi car je n'ai pas besoin de rediriger:

 System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.StartInfo.FileName = "C:\\scripts\\batchfile1.bat";
            proc.StartInfo.RedirectStandardError = false;
            proc.StartInfo.RedirectStandardOutput = false;
            proc.StartInfo.UseShellExecute = false;
            proc.Start();
            proc.WaitForExit();
11
wergeld

Voici ce que vous recherchez:

Le service raccroche à WaitForExit après l'appel du fichier de commandes

Il s'agit de savoir pourquoi un service ne peut pas exécuter un fichier, mais il affiche tout le code nécessaire pour le faire. 

11
kemiller2002

Pour le problème que vous rencontrez à propos du fichier de commandes demandant à l'utilisateur si la destination est un dossier ou un fichier, si vous connaissez la réponse à l'avance, vous pouvez procéder comme suit:

Si la destination est un fichier: Echo f | [chemin du fichier batch]

Si dossier: Echo d | [chemin du fichier batch]

Essentiellement, la lettre après "echo" sera dirigée vers l'entrée du fichier batch.

0
Anshul