Batchdatei lässt sich nicht ausführen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Eierlein.

    Batchdatei lässt sich nicht ausführen

    Hallo liebe Community,

    Ich möchte eine Batchdatei mittels Visual Basic erstellen das tue ich mit:

    Quellcode

    1. Dim tempFile As System.IO.FileStream
    2. tempFile = System.IO.File.Create("tmp.bat")
    3. tempFile.Close()


    In die Datei schreibe ich so:

    Quellcode

    1. My.Computer.FileSystem.WriteAllText("tmp.bat","attrib +h +s 'tmp.bat'", False)


    Die Batchdatei führe ich so aus:

    Quellcode

    1. Task.Run(Sub()
    2. Dim pxx As Process = Process.Start("tmp.bat")
    3. pxx.WaitForExit()
    4. End Sub)

    Mein Problem ist aber, dass die Batchdatei nichts tut.
    Die Datei wird geöffnet und schließt sich wieder (wie es sein soll), aber es passiert nichts.
    Wenn ich die Datei selber speichere (manuell in Notepad++) als .bat mit genau diesem Befehl funktioniert die Datei auch innerhalb Visual Basic.
    Aber ich möchte die Datei während des laufenden Betriebes automatich erstellen lassen.

    LG Leon :)
    DEVICEHIGH=C:\DOS\CAT.SYS ...der schnellste Maustreiber der Welt! :thumbsup:
    Ich bin gerade dabei ein Programm zu programmieren mit dem man Ordner verstecken kann.
    Dabei werden Batchbefehle angewendet.
    Ich hatte vorher die Batch-Befehle direkt mit Process.start("Befehl") gesendet.
    Das hatte alles auch super funktioniert bis ich merkte, dass die Anwendung nur im Debugger läuft :/
    Jetzt hatte ich die Idee beim Erststart des Programmes die Batchdateien generiert und versteckt werden.
    Das Problem hierbei ist das die generierten Batchdateien nicht tun was sie sollen.

    Kann es sein das die Dateien im falschen Format sind, weil wenn ich mit Notepad++ die generierten Dateien öffne steht unten rechts "Unix" und bei den manuell erstellten steht "Dos/Windows"
    DEVICEHIGH=C:\DOS\CAT.SYS ...der schnellste Maustreiber der Welt! :thumbsup:
    Ich hätte jetzt gesagt, dass das wahrscheinlich mit der WorkingDirectory zusammenhängt, könnte da aber nichts garantieren.
    Eine bessere Methode wäre jedoch, eine DirectoryInfo für deinen Ordner zu machen und dann bei dieser in DirectoryInfo.Attributes den Flag FileAttributes.Hidden zu setzen. Damit kannst du das Verstecken von Ordnern erreichen, ohne Batch zu nutzen.

    coldclearwater schrieb:

    "Unix" ... "Dos/Windows"
    Das sind die Zeilenende-Kennungen, das kannst Du ignorieren.
    Den 1. Code brauchst Du nicht. Wenn Du in eine Datei schreibst, die nicht da ist, wird sie erstellt, der 2. Code genügt.
    Dein Programm soll warten, bis der Prozess beendet ist. Teste mal dies (mit Notepad!):

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private WithEvents prc As Process
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. prc = New Process
    5. prc.StartInfo.FileName = "c:\temp\tmp.bat" '"notepad.exe"
    6. prc.EnableRaisingEvents = True
    7. prc.Start()
    8. End Sub
    9. Private Sub prc_exit(sender As Object, e As EventArgs) Handles prc.Exited
    10. MessageBox.Show("Prozess beendet")
    11. End Sub
    12. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    13. IO.File.WriteAllText("c:\temp\tmp.bat", "Pause")
    14. End Sub
    15. End Class
    Erstell mit Button 2 die Batch-Datei (hier: einfach nur ein Pause-Befehl) und starte diese mit Button 1.
    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!