2008-12-26 5 views
11

Was ich tun muss, ist eine C# 2005 GUI-App aufrufen eine .bat und mehrere VBScript-Dateien auf Benutzerwunsch. Dies ist nur eine Stop-Gap-Lösung bis zum Ende der Ferien und ich kann alles in C# schreiben. Ich kann die VBScript-Dateien ohne Probleme ausführen, aber ich kann die .bat-Datei nicht ausführen. Wenn ich in der C# -App "klicke", um die .bat-Datei auszuführen, öffnet und schließt sich ein DOS-Fenster sehr schnell und die Test-.bat-Datei wird nicht ausgeführt - "Windows erkennt Fledermaus nicht als internen oder externen Befehl" ist der Fehler zurückgegeben in der DOS-Box. Wenn ich einfach doppelt auf die .bat-Datei klicke oder sie manuell über die Eingabeaufforderung ausführe, wird sie ausgeführt. Ich benötige auch die .bat-Datei, um stillschweigend auszuführen, wenn eine Benutzerinteraktion erforderlich ist - dieses Skript kopiert 11k + -Dateien in Ordner auf einer Netzwerkmaschine und gelegentlich "vergisst" Windows, wenn das Ziel eine Datei oder ein Verzeichnis ist und fordert den Benutzer auf, es mitzuteilen was es ist (das ist ein ganz anderes Thema, das hier nicht zur Diskussion steht ... unnötig zu sagen, dass ich mich darüber ärgere).Wie führe ich eine .bat Datei von einer C# Windows Form App aus?

Bisher in meiner C# Quelle Ich habe dies:

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")) 
     { 
     } 

Ich bin mir bewusst, dass dieser Code funktioniert nicht - aber es ist im Wesentlichen, was ich tun will. Was ich sehe, ist so etwas für .bat-Dateien. Ich nehme an, dass ich dem System mitteilen muss, cmd zu verwenden, um die .bat auszuführen. Ich weiß nicht, wie ich das machen soll. Ich habe dieses site ausgecheckt, das für C# 2003 ist. Nicht viel Hilfe für mich, da ich mit C# sehr grün bin.

EDIT: Mit Kevins Beitrag versuchte ich es erneut. Gleiche Lösung Skript von dieser Stelle aber für mich geändert, da brauche ich nicht zu umleiten:

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(); 

Antwort

11

Hier ist, was Sie suchen:

Service hangs up at WaitForExit after calling batch file

Es geht um die Frage, warum ein Der Dienst kann keine Datei ausführen, zeigt aber den dafür erforderlichen Code an.

+3

Okay, das scheint eher so zu sein. Ich werde das ausprobieren. Sidebar - Haben Sie sich jemals gewünscht, dass Programmiersprachen von MS längere Namen haben? Googeln "C#" ".bat" ist im Extremfall vergeblich. – wergeld

0

Für das Problem, das Sie über die Batch-Datei sind mit dem Benutzer zu fragen, ob das Ziel ein Ordner oder eine Datei ist, wenn Sie die Antwort im Voraus wissen, Sie als solche tun:

Wenn Ziel eine Datei : Echo f | [Stapelverarbeitungsdateipfad]

Wenn Ordner: Echo d | [Batch-Dateipfad]

Es wird im Wesentlichen nur den Buchstaben nach "echo" zur Eingabe der Batch-Datei leiten.

Verwandte Themen