it-swarm.com.de

Wie führe ich eine .bat-Datei in einer C # -Fenster-Formular-App aus?

Ich muss eine C # 2005-GUI-App haben, die auf Anforderung des Benutzers eine .bat-Datei und mehrere VBScript-Dateien aufruft. Dies ist nur eine Zwischenlösung bis zum Ende der Ferien und ich kann alles in C # schreiben. Ich kann die VBScript-Dateien problemlos ausführen, aber ich kann die BAT-Datei nicht ausführen. Wenn ich in der C # -App "klicke", um die .bat-Datei auszuführen, wird ein DOS-Fenster geöffnet und sehr schnell geschlossen, und die .bat-Testdatei wird nicht ausgeführt. "Windows erkennt bat nicht als internen oder externen Befehl" ist der Fehler in der DOS-Box zurückgegeben. Wenn ich einfach auf die .bat-Datei doppelklicke oder sie manuell über die Eingabeaufforderung ausführe, wird sie ausgeführt. Ich benötige auch die .bat-Datei für die automatische Ausführung, sofern keine Benutzerinteraktion erforderlich ist. Dieses Skript kopiert 11k + -Dateien in Ordner auf einem Netzwerkcomputer und Windows "vergisst" gelegentlich, ob das Ziel eine Datei oder ein Verzeichnis ist, und fordert den Benutzer auf, dies mitzuteilen was es ist (dies ist ein ganz anderes Thema, das hier nicht zur Diskussion steht ... ich brauche nicht zu sagen, dass es mich ärgert).

Bisher habe ich in meiner C # -Quelle Folgendes:

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

Mir ist bewusst, dass dieser Code nicht funktioniert - aber es ist im Wesentlichen das, was ich von ihm möchte. Was ich sehe, ist so etwas für .bat-Dateien. Ich gehe davon aus, dass ich das System anweisen muss, cmd zum Ausführen der .bat-Datei zu verwenden. Ich weiß nicht, wie ich das machen soll. Ich habe diese Site überprüft, die für C # 2003 bestimmt ist. Es hilft mir nicht viel, da ich mit C # sehr grün bin.

EDIT: Mit Kevin Beitrag habe ich es erneut versucht. Dasselbe Lösungsskript aus diesem Beitrag, aber für mich geändert, da ich nicht umleiten muss:

 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

Was Sie suchen:

Dienst wird nach dem Aufrufen der Batchdatei bei WaitForExit aufgelegt

Es geht um die Frage, warum ein Dienst eine Datei nicht ausführen kann, aber er zeigt den gesamten erforderlichen Code. 

11
kemiller2002

Für das Problem, dass die Batchdatei den Benutzer fragt, ob das Ziel ein Ordner oder eine Datei ist. Wenn Sie die Antwort im Voraus kennen, können Sie Folgendes tun:

Wenn das Ziel eine Datei ist: Echo f | [Batch-Dateipfad]

Wenn Ordner: Echo d | [Batch-Dateipfad]

Es wird im Wesentlichen nur den Brief nach "Echo" an die Eingabe der Stapeldatei weitergeleitet.

0
Anshul