Process.Start Probleme mit Parameter

  • VB.NET

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

    Process.Start Probleme mit Parameter

    Moin Zusammen...

    ich scheiter aktuell an einem Aufruf einer exe Datei mit vielen Argumenten.
    Ich sehe nur wie kurz das Fenster der Exe auf geht und dann wieder beendet ist.

    Hier mal der Code... Was kann ich besser machen um so viele Argumente zu übergeben?

    VB.NET-Quellcode

    1. Private Function make_offensive() As String
    2. Dim arguments As String = "-b Localhost: " & localpath & "\dat\datenbank.gdb" & localpath & "\backup\myname.out -user sysdba -password masterkey"
    3. Process.Start(localpath & "\firebird\bin\gbak.exe", arguments)
    4. End Function


    Grüße Stefan
    Nein! Doch! OHH!
    Sicher, dass der String passt? Dieses localpath & "\dat\datenbank.gdb" & localpath & kommt mich komisch vor. Wenn ich da für localpath z.B. C:\ einsetze, kommt ja C:\\dat\datenbank.gdbC:\ raus. Ich glaub nicht, dass das stimmt, dass nach dem ersten Komplettdateipfad es ohne Leerzeichen mit nem Verzeichnis weitergeht (".gdbC:\"). Oder was steht z.B. in localpath?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @samson Mach Dir ne ordentliche Process-Instanz mit New Process, berarbeite die ProcessStartInfo, z.B. auch das Ausführungsverzeichnis,
    setze Pfade in Apostrophen, wenn sie Leerzeichen enthalten.
    Probiere den Aufruf in einer Batch-Datei. Funktioniert das?
    docs.microsoft.com/de-de/dotne…N&view=netframework-4.7.2
    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!
    @RodFromGermany Danke für den Tipp mit New Process...
    Ich hab da mal gegoogled und bin auf folgenden Ansatzpunkt gestoßen, bisher hat meine Recherche leider nicht ergeben, wie ich Argumente mit übergebe

    VB.NET-Quellcode

    1. Dim myProcess As Process = New Process()
    2. Try
    3. myProcess.StartInfo.UseShellExecute = False
    4. myProcess.StartInfo.FileName = "C:\HelloWorld.exe"
    5. myProcess.StartInfo.CreateNoWindow = True
    6. myProcess.Start()
    7. Catch e As Exception
    8. Console.WriteLine(e.Message)
    9. End Try
    Nein! Doch! OHH!

    samson schrieb:

    wie ich Argumente mit übergebe
    Das geht so:

    VB.NET-Quellcode

    1. myProcess.StartInfo.Arguments = arguments
    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!
    @RodFromGermany
    Danke für den Zaunpfahl... Ich hab es im Editor anscheinend ständig überlesen :(

    VaporiZed schrieb:

    kommt mich komisch vor. Wenn ich da für localpath z.B. C:\ einsetze, kommt ja C:\\dat\datenbank.gdbC:\

    Stimmt... localpath ist der Verzeichnispfad von dem Programm...
    Dieser steht wirklich nur mit C:\Programm drin, ohne \
    Das mit dem Fehlenden Leerzeichen, hatte ich tatsächlich übersehen, leider hatte das auch nicht geholfen.
    Sobald ich Zeit habe, versuche ich es mal mit

    VB.NET-Quellcode

    1. Dim myProcess As Process = New Process()
    2. Dim arguments As String = "-b Localhost: " & localpath & "\dat\datenbank.gdb " & localpath & "\backup\myname.out -user sysdba -password masterkey"
    3. Try
    4. myProcess.StartInfo.UseShellExecute = False
    5. myProcess.StartInfo.Arguments = arguments
    6. myProcess.StartInfo.FileName = "C:\HelloWorld.exe"
    7. myProcess.StartInfo.CreateNoWindow = True
    8. myProcess.Start()
    9. Catch e As Exception
    10. Console.WriteLine(e.Message)
    11. End Try

    Nein! Doch! OHH!

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

    Hast Du das mal in der Kommandozeile, also CMD.Exe ausprobiert, ob das wirklich so klappt? Also:
    C:\HelloWorld.exe -b Localhost: C:\Programm\dat\datenbank.gdb C:\Programm\backup\myname.out -user sysdba -password masterkey
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed
    Jupp... die Zeile kommt ohne die Parametrierung (localpath) aus einem batchfile.
    Originalzeile (Programm.exe ersetzt)

    "C:\ProgrammXY\firebird\bin\gbak.exe" -b "Localhost:C:\ProgrammXY\dat\mydb.gdb" "C:\ProgrammXY\backup\%myname%" -user sysdba -password masterkey
    Es handelt sich hier um die Standardinstanz vom Firebird Datenbankdienst.
    Ist zu googlen ;) Sogar die Userdaten sind so :)

    gbak.exe ist eine "online-Sicherung" der Datenbank womit die Firebird Guardian Dienste nicht abgeschaltet werden müssen.




    Habs eben schnell mit ner leeren forms getestet > geht.
    Für alle die den Code nochmal komplett haben möchten, hier:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim p As New Process()
    3. Dim args As String = "-b Localhost:C:\MyProgram\dat\mydb.gdb C:\MyProgram\backup\mydb.out -user sysdba -password masterkey"
    4. p.StartInfo.FileName = "C:\MyProgram\firebird\bin\gbak.exe" 'programm name / filename
    5. p.StartInfo.Arguments = args
    6. p.StartInfo.WindowStyle = ProcessWindowStyle.Normal
    7. p.Start() 'programm starten
    8. ' Falls noch jemand ausgeben möchte, wie der Prozess heißt...
    9. Label1.text = p.ProcessName.toString
    10. p.WaitForExit() 'ich brauche diese Funktion, da im Anschluss danach noch was passieren soll...
    11. p.Close()
    12. End Sub
    13. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    14. Dim p As New Process()
    15. Dim args As String = "-c C:\MyProgram\backup\mydb.out C:\MyProgram\dat\mydb_restored.gdb -user sysdba -password masterkey"
    16. p.StartInfo.FileName = "C:\MyProgram\firebird\bin\gbak.exe" 'programm name / filename
    17. p.StartInfo.Arguments = args
    18. p.StartInfo.WindowStyle = ProcessWindowStyle.Normal
    19. p.Start() 'programm starten
    20. ' Falls noch jemand ausgeben möchte, wie der Prozess heißt...
    21. Label2.text = p.ProcessName.toString
    22. p.WaitForExit() 'ich brauche diese Funktion, da im Anschluss danach noch was passieren soll...
    23. p.Close()
    24. End Sub


    Vielen Dank an all die Hilfe!
    Grüße Stefan
    Nein! Doch! OHH!

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

    Du solltest prüfen, ob die (fehlenden) Anführungszeichen und das (nichtvorhandene) Leerzeichen zwischen localhost: und dem Pfad relevant sind:
    C:\ProgrammXY\firebird\bin\gbak.exe -b Localhost: C:\ProgrammXY\dat\mydb.gdb C:\ProgrammXY\backup\myname.out -user sysdba -password masterkey
    "C:\ProgrammXY\firebird\bin\gbak.exe" -b "Localhost:C:\ProgrammXY\dat\mydb.gdb" "C:\ProgrammXY\backup\%myname%" -user sysdba -password masterkey
    Und ist %myname%=myname.out ?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    RodFromGermany schrieb:

    setze Pfade in Apostrophen, wenn sie Leerzeichen enthalten.
    Probiere den Aufruf in einer Batch-Datei. Funktioniert das?
    War doch alles schon in Post #6, haste aber ignoriert.
    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!