Wie starte ich über VB.Net ein externes Programm?

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von EaranMaleasi.

    Wie starte ich über VB.Net ein externes Programm?

    Hallo zusammen,

    ich bin neu hier auf der Plattform. Ich habe eine Frage bzgl. des Starten eines externen Programms über VB.net. Ich müsste parallel warten bis das Programm beendet wird und im nächsten Schritt ein anderes Programm starten.
    Kann mir da eventuell jemand helfen?

    Vg :)

    Thema verschoben. ~Trade

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

    Starten eines externes Programmes kannst du mit der System.Diagnostics.Process-Klasse nachen. Einfach mal nach MSDN und Process googlen. Das Beenden des Prozesses kannst du - sofern RaiseEvents auf true gesetzt wurde, per Process-Event ProcessExited gerausfinden.

    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Tipps beim Verwenden der Process-Klasse:
    Die statische Funktion Process.Start solltest Du vermeiden. Die funktioniert zwar grundsätzlich, hat aber ein paar Tücken:
    Sie gibt ein Process-Objekt zurück, das den Prozess repräsentiert. Aber ich habe schon erlebt, dass unter gewissen Umständen Nothing zurückgegeben wird.
    Da die Process-Klasse IDisposable implementiert sollte das zurückgegebene Objekt immer verworfen werden, wenn man es nicht benötigt. Die schnellste Variante sieht so aus:

    VB.NET-Quellcode

    1. Process.Start("mspaint.exe", "C:\foo.png").Dispose()

    Aber wie oben erklärt wird manchmal Nothing zurückgegeben. Das führt dann hier zu einer NullReferenceException. Man müsste eine Prüfung einfügen, aber das ist umständlich.
    Der folgende Code funktioniert in jeder Situation korrekt und bietet sogar mehr Flexibilität was Einstellungen betrifft (StartInfo):

    VB.NET-Quellcode

    1. Using PaintProcess As New Process
    2. PaintProcess.StartInfo.FileName = "mspaint.exe"
    3. PaintProcess.StartInfo.Arguments = "C:\foo.png"
    4. PaintProcess.Start()
    5. End Using
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    @Atilla1907 Willkommen im Forum. :thumbup:
    Probier mal dies:

    VB.NET-Quellcode

    1. Private WithEvents prc As Process
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. prc = New Process
    4. prc.StartInfo.FileName = "notepad.exe"
    5. prc.EnableRaisingEvents = True
    6. prc.Start()
    7. End Sub
    8. Private Sub prc_exit(sender As Object, e As EventArgs) Handles prc.Exited
    9. MessageBox.Show("Notepad beendet")
    10. End Sub
    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!
    Hallo Zusammen... bin Neuling

    und obiges ausprobiert und möchte dies für meine Anwendung verwenden.
    Funktioniert mit notepad, aber nicht mit mstsc.exe (RDP), da wir die sub prc1_exit
    sofort ausführt


    VB.NET-Quellcode

    1. Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
    2. prc1 = New Process
    3. 'prc1.StartInfo.FileName = "notepad.exe"
    4. prc1.StartInfo.FileName = "mstsc.exe"
    5. prc1.StartInfo.Arguments = cf1 'Pfad zum Config File von RDP
    6. prc1.EnableRaisingEvents = True
    7. prc1.Start()
    8. End Sub
    9. Private Sub prc1_exit(sender As Object, e As EventArgs) Handles prc1.Exited
    10. MessageBox.Show("RDP1 beendet")
    11. End Sub

    Herzlich willkommen,
    zur Info das gibt gleich erstmal Lack von den
    Mods, wenn die sehen dass du mit irgendeinem Uralt-Thread
    Leichenschändung betreibst. Lies dir am besten erstmal die [Forum] Boardregeln
    durch und dann eröffne für ein aktuelles Problem auch einen aktuellen
    Thread. Hier darf ich das leider nicht mit dir diskutieren.


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.

    Herby007 schrieb:

    aber nicht mit mstsc.exe (RDP), da wir die sub prc1_exit
    sofort ausführt


    Hey, ohne dein Argument startet es aber, oder? Bei mir klappt das zumindest. Probier das mal um die Fehlerquelle einzugrenzen.

    Gruß


    Meine Website:
    www.renebischof.de

    Meine erste App (Android):
    PartyPalooza