3 Stimmen

Ausführen von Batch-Dateien und Lesen der letzten Zeile der Ausgabe nach einer Pause

Ich habe eine Webanwendung mit einer Seite voller Batchdateien, die der Benutzer ausführen, die Ausgabe anzeigen und Eingaben senden kann. Mein Problem tritt auf, wenn der Prozess auf etwas stößt, das ihn zum Anhalten veranlasst, z. B. eine Pause oder eine Frage, die den Benutzer auffordert, Y oder N zu drücken, um fortzufahren. Für die Zwecke dieser Frage werden wir uns für die Pause entscheiden.

Dies ist meine Batch-Datei:

pause

Wenn ich das Programm unter Windows ausführe, erscheint auf dem Bildschirm die Meldung "Drücken Sie eine beliebige Taste, um fortzufahren...", ich drücke die Eingabetaste, und es wird beendet. Aber wenn meine Anwendung diese Batchdatei ausführt, erhalte ich keine Ausgabe, aber ich weiß, worauf sie wartet, also drücke ich die Eingabetaste, und erst dann sehe ich die Ausgabe "Drücken Sie eine beliebige Taste, um fortzufahren...".

Ich habe eine vereinfachte Version meines Codes in einer Konsolenanwendung erstellt, und es passiert dasselbe: Ich erhalte einen leeren Bildschirm, drücke die Eingabetaste und sehe dann "Press any key to continue...".

Haben Sie eine Idee, wie ich diese Ausgabezeile erhalten kann, BEVOR ich die Taste drücken muss?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.IO;

namespace BatchCaller
{
    class Program
    {
        static void Main(string[] args)
        {
            ProcessStartInfo psi = new ProcessStartInfo()
            {
                FileName = @"C:\Projects\BatchCaller\BatchCaller\Test2.bat",
                RedirectStandardOutput = true,
                RedirectStandardInput = true,
                UseShellExecute = false,
                CreateNoWindow = true
            };

            Process proc = new Process();

            proc.StartInfo = psi;
            proc.OutputDataReceived += new DataReceivedEventHandler(proc_OutputDataReceived);
            proc.Start();
            proc.BeginOutputReadLine();

            // Problem is not here, ignore this, just my temporary input method.
            // Problem still occurs when these two lines are removed.
            string inputText = Console.ReadLine();
            proc.StandardInput.WriteLine(inputText);

            proc.WaitForExit();
        }

        static void proc_OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            // This method doesnt get called for output: "Press any key to continue..."
            // Why?
            if (e.Data != null)
                Console.WriteLine(e.Data);
        }
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X