Mit "Process" eine .bat datei Starten ohne dass sich diese gleich wieder schließt?

  • C#

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Mit "Process" eine .bat datei Starten ohne dass sich diese gleich wieder schließt?

    Hey Leute,

    ich hab ein "Problem".

    Und zwar kann ich zwar mittels Buttonklick eine Batch Datei Starten aber sie schließt sich gleich wieder.
    Man kann nicht einmal den Inhalt lesen.

    Vielleicht wisst ihr wo ich was vergessen habe.


    C#-Quellcode

    1. private Process test1;
    2. private void button1_Click(object sender, EventArgs e)
    3. {
    4. test1 = new Process();
    5. test1.StartInfo.Arguments = Console.ReadLine();;
    6. test1.StartInfo.CreateNoWindow = false;
    7. test1.StartInfo.FileName = "ServerStart.bat";
    8. test1.StartInfo.RedirectStandardInput = true;
    9. test1.StartInfo.UseShellExecute = false;
    10. if (test1 != null)
    11. {
    12. test1.Start();
    13. }
    14. StreamWriter sw = test1.StandardInput;
    15. if (sw.BaseStream.CanWrite)
    16. {
    17. sw.WriteLine("Test");
    18. label1.Text = "Derzeit läuft dein Server";
    19. }
    20. }


    Und hier die Batch Datei:

    Quellcode

    1. @echo off
    2. echo "Server wird gestartet..."
    3. pause

    DaNeubi schrieb:

    aber sie schließt sich gleich wieder.
    Das Zauberwort heißt Debuggen.
    Setz nen Haltepunkt rein, dann merkst Du, dass die Console mit Aufruf der Zeile

    C#-Quellcode

    1. sw.WriteLine("Test");
    geschlossen wird.
    Deine Logik ist also falsch.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    DaNeubi schrieb:

    Und wie muss ich meinen Code dann ändern
    Zunächst musst Du Fehler finden, beim Start der Console kommt dieser:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also das ganze ist ja mit Windows Forms C# geschrieben und wenn ich das in Visual Studio oder auch als .exe ausführe krieg ich keine Fehlermeldung. Nur eine batch die sich gleich wieder schließt. Es ändert sich sogar schön der Text von label1.

    Bei C# Consolenanwendung klappt das bei mir. Zwa nicht genau mit diesem Code aber da klappt das und da schließt sich die .bat datei auch nicht
    @KaskadekingDE Okay das sagt mir dass ich da also kein Argument brauch und auch im start-klick-button keine StreamWriter.

    Aber wenn ich das jetz mal mit der Datei mache die ich eigentlich starten will, dann geht das trotzdem nicht.

    Bei der batchdatei handelt es sich um eine Start Datei für einen Minecraft Server und die schließt sich dann auch sofort.

    C#-Quellcode

    1. private Process test1;
    2. private void button1_Click(object sender, EventArgs e)
    3. {
    4. test1 = new Process();
    5. test1.StartInfo.CreateNoWindow = false;
    6. test1.StartInfo.FileName = "ServerStart.bat";
    7. test1.StartInfo.RedirectStandardInput = true;
    8. test1.StartInfo.UseShellExecute = false;
    9. if (test1 != null)
    10. {
    11. test1.Start();
    12. }
    13. }


    Und rein Theoretisch hab ich doch alles was da reinschreiben könnte rausgenommen, oder lieg ich da falsch?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DaNeubi“ ()

    DaNeubi schrieb:

    rausgenommen
    Das Minimum wäre dies:

    C#-Quellcode

    1. private void button1_Click(object sender, EventArgs e)
    2. {
    3. Process.Start("ServerStart.bat");
    4. }
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja soweit wa ich ja auch schon, aber ich brauche den StandardInput und den kann ich nur benutzen wenn ich "UseShellExecute" auf "false" setzt.

    Und sobald ich das mache hab ich wieder das Problem dass mir das Fenster einfach verschwindet ohne dass ich was lesen kann...

    DaNeubi schrieb:

    das Fenster einfach verschwindet
    Das ist nun mal bei einer Batch so, die läuft linear durch, und wenn Du beginnst, was zu schreiben, wird damit der Pause-Befehl beendet.
    Schreib mal 10 oder 20 Pause-Befehle nacheinander in die Batch. Zum Testen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!