Aus VB externe .exe mit Parametern aufrufen

  • VB6

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

    Aus VB externe .exe mit Parametern aufrufen

    Nabend zusammen,

    als Anfänger sitze ich gerade an einem Problem bei ich eure Hilfe brauchen könnte.
    Und zwar schreibe ich derzeit ein kleines Programm welches nach der Eingabe von mehreren Variablen eine .exe ausführen soll und die Variablen als Parameter anhängen soll.
    Zur besseren "visualisierung" ein Beispiel:
    Am Anfang frage ich vier Werte ab. Wert 1: Pfad incl. Datei zur .exe welche ausgeführt werden soll. Wert 2: Pfad zu einem Ordner. Wert 3: Pfad zu einer Datei. Wert 4: Ein simpler String.

    Der fertige Aufruf sollte dann wie folgt aussehen:
    programm.exe -option1:"C:\Path\to\Folder\File.abc" -option2:"C:\Path\to\Folder\" -option3:"C:\Path\to\Folder\File.def" -option4:1234567890

    Mein Versuch das umzusetzen fing so an :
    Process.Start(""C:\Path\to\Folder\programm.exe" + " " + "option1:""" + Wert1 + """ + " " + "option2:""" + Wert2 + """

    Wenn ich nur Wert1 hätte würde das auch funktionieren. Allerdings hat er bereits ab Wert2 Probleme mit den Gänsefüßchen. Die Pfade müssen jedoch in Gänsefüßchen stehen deshalb wollte ich die so einfügen. Klappt aber nicht.
    Wie würdet Ihr das lösen? Gibt es da vllt. sogar einen eleganteren Weg das zu lösen?

    VG und schönen Abend :)
    Informiere Dich über die String.Format-Funktion, genauer diese hier: String.Format(String, Object[]) As String. Die vereinfacht das Zusammenstöpseln von Strings gewaltig.
    Du kannst dann auch die Anführungszeichen als Argument angeben, wordurch du im Format-String nicht ständig die doppelten Anführungszeichen stehen hast.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    @CodeRed
    Das könnte zwar die Symptome beheben, aber die eigentlichen Probleme werden dadurch ja nicht gelöst. Der Code bleibt immer noch unlesbar/unwartbar.

    Eine Frage, die ich noch an den TE habe:
    Geht das so überhaupt?: abcdef:"Irgendwas mit Leerzeichen"
    Sicher, dass das nicht so sein soll?: "abcdef:Irgendwas mit Leerzeichen" Also mit dem Anführungszeichen ganz links?
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Hallo. Ich hoffe ich habe dein Problem richtig verstanden und dir bringt der folgende Code etwas:

    VB.NET-Quellcode

    1. Process.Start("program.exe " & "-option1:""" & PfadZuDatei & """ -option2:""" & PfadZuOrdner & """ -option3:""" & PfadZuDatei & """ -option4:""" & "SimplerString")


    Grüsse
    CodeRed
    Umfangreicher Converter im Browser: CloudConvert
    Temporäre e-Mail: temp-mail
    Text-Übersetzter: DeepL
    Kostenloser Webspace: bplaced
    Nun, hier würde es sich wirklich lohnen mit String.Format zu arbeiten.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    CodeRed schrieb:

    und dir bringt der folgende Code etwas:

    VB.NET-Quellcode

    1. Dim args = String.Format("-option1:""{0}"" -option1:""{1}"" -option1:""{2}"" -option1:""{3}""", PfadZuDatei, PfadZuOrdner, Name, "SimplerString")
    2. 'MessageBox.Show(args) ' zum Ansehen und überzeugen, dasses stimmt
    3. Dim pr As New Process
    4. pr.StartInfo.FileName = "DeinPfad\Programm.exe"
    5. pr.StartInfo.Arguments = args
    6. pr.StartInfo.WorkingDirectory = "DeinPfad"
    7. pr.Start()
    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!
    Nabend,

    vielen Dank für den Hinweis auf String.Format. Das sieht nun bedeutend übersichtlicher aus und funktioniert theoretisch auch soweit.
    @Niko Ortner: Ja, das mit den Anführungszeichen ist leider so gewollt.

    Jetzt habe ich jedoch noch zwei Probleme oder Fragen zu Process.Start
    - Das Programm welches ich aufrufen möchte läuft in einer Commando Zeile. Leider schließt sich die CMD was direkt wieder. Was heißt das Programm wurde nicht korrekt aufgerufen. Besteht die Möglichkeit hier die CMD offen zu lassen um herauszufinden was da schief läuft?
    - Ist es möglich bei StartInfo.FileName mit einer Variable zu arbeiten? Ich sehe immer nur das hier feste Pfade eingetragen werden und auch die Hilfe zum Befehl arbeitet mit einem festen Pfad.

    Danke im voraus für eure Mühe
    VG
    jetr
    @jetr
    Wenn ein (Konsolen)Programm sofort geschlossen wird, man aber die Ausgabe sehen will, kann man das Programm über cmd starten:
    puu.sh/atBwC.png
    Also den Inhalt von Process.StartInfo.FileName am Anfang (muss in Anführungszeichen stehen, wenn Leerzeichen enthalten sind) und danach, mit einem Leerzeichen getrennt, die Argumente (der Inhalt von Process.StartInfo.Arguments)
    Also bei Dir würde das in etwa so aussehen:

    Brainfuck-Quellcode

    1. |----cmd.exe------
    2. |C:\Users\Name> "C:\Pfad zum Programm\Datei.exe" -option1:"C:\Datei Name.txt" -option2:"Und so weiter"
    3. |
    4. |
    5. |-----------------


    Und ja, man kann auch eine Variable verwenden.
    Beispiele:

    VB.NET-Quellcode

    1. Dim Test As String = "C:\Foo.exe"
    2. Process.StartInfo.FileName = Test
    3. Using Dlg As New OpenFileDialog
    4. If Dlg.ShowDialog = DialogResult.OK Then
    5. Process.StartInfo.FileName = Dlg.FileName
    6. End If
    7. End Using
    8. Process.StartInfo.FileName = WebClient.DownloadString("http://www.abc.de/test.txt")

    Wie der String in die FileName-Property kommt, bleibt Dir überlassen. Wichtig ist nur, dass es ein gültiger Pfad ist.

    Edit:
    Brainfuck-Quellcode
    Ok, ich frag mich wie WBB auf diese Idee gekommen ist...
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

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

    jetr schrieb:

    Leider schließt sich die CMD was direkt wieder.
    Schreib eine Batch-Datei mit Deinem Aufruf und unten drunter den Befehl Pause.
    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!