2008-12-26 6 views
11

Ce que je dois faire est d'avoir une application GUI C# 2005 appeler un fichier .bat et plusieurs fichiers VBScript à la demande de l'utilisateur. Ceci est juste une solution d'arrêt jusqu'à la fin des vacances et je peux tout écrire en C#. Je peux exécuter les fichiers VBScript sans problème mais je suis incapable d'exécuter le fichier .bat. Quand 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 test .bat ne s'exécute pas - "Windows ne reconnaît pas bat comme une commande interne ou externe" est l'erreur retourné dans la boîte DOS. Si je double-clique simplement sur le fichier .bat ou l'exécute manuellement à partir de l'invite de commande, il s'exécute. J'ai également besoin que le fichier .bat s'exécute en silence à moins qu'une interaction de l'utilisateur ne soit requise - ce script copie des fichiers 11k + 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 le ce que c'est (c'est un tout autre problème pas pour la discussion ici ... Inutile de dire que je suis agacé par elle).Comment exécuter un fichier .bat à partir d'une application de formulaire C# windows?

Jusqu'à présent, 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 du fait que ce code ne fonctionne pas - mais il est essentiellement ce que je veux faire. Ce que je regarde est quelque chose comme ça pour les fichiers .bat. Je suppose que je dois dire au système d'utiliser cmd pour lancer 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, je l'ai encore essayé. script solution même de ce poste, mais modifié pour moi puisque je ne 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(); 

Répondre

11

Voici ce que vous cherchez:

Service hangs up at WaitForExit after calling batch file

Il est sur une question de savoir pourquoi une service ne peut pas exécuter un fichier, mais il montre tout le code nécessaire pour le faire.

+3

D'accord, cela semble plus comme ça. Je vais essayer ça. Barre latérale - Souhaitez-vous que les langages de programmation de MS aient des noms plus longs? Googling "C#" ".bat" est futile à l'extrême. – wergeld

0

Pour le problème que vous rencontrez sur le fichier batch demandant à l'utilisateur si la destination est un dossier ou un fichier, si vous connaissez la réponse à l'avance, vous pouvez le faire en tant que tel:

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

Si le dossier: echo d | [chemin du fichier de traitement par lots]

Il suffira de placer la lettre après "echo" dans l'entrée du fichier de commandes.

Questions connexes