Exe-Datei mit Parametern aufrufen WINXP-WIN7

  • VB.NET

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von Outsider77.

    Exe-Datei mit Parametern aufrufen WINXP-WIN7

    Hallo zusammen,

    bis vor Kurzem lief bei uns in der Firma auf einem XP-Rechner ein kleines vb-Programm, welches eine exe-Datei mit Parametern aufrief:

    VB.NET-Quellcode

    1. Shell("C:\programme\procam\uc\ucw32.exe " & found_Semi & " " & DXFPfadDE & "\Spezial\" & Kappen_Name.Replace(".sem", ".dxf") & " semi2dxf " & "C:\programme\procam\uc\PARAM.INI")

    Jetzt wurde der Rechner durch einen neuen WIN7-PC ersetzt, auf dem dieses Programm weiterhin seine Arbeit verrichten soll.
    Ich habe also die Pfad-Angaben an W7 angepaßt, jetzt sieht der Aufruf wie folgt aus:

    VB.NET-Quellcode

    1. Dim programm_pfad As String = Environment.GetEnvironmentVariable("ProgramFiles(x86)")
    2. Shell(programm_pfad & "\procam\uc\ucw32.exe " & found_Semi & " " & DXFPfadDE & "\Spezial\" & Kappen_Name.Replace(".sem", ".dxf") & " semi2dxf " & programm_pfad & "\procam\uc\PARAM.INI")

    Leider kommt hierbei folgende Fehlermeldung:


    Bei dem W7-PC handelt es sich um ein 64bit-System, ich habe das vb-Programm für x86-Plattform erstellt.
    Ich habe auch über einen Aufruf der exe per

    VB.NET-Quellcode

    1. Prozess.Start()
    nachgedacht, leider weiß ich nicht, wie das dort mit der Parameter-Übergabe funktioniert.

    Ein Aufruf der exe ohne Parameter startet diese ohne Probleme, deshalb vermute ich das Problem bei der Parameter-Übergabe.
    Könnte mir bitte jemand bei der Lösung meines Problems behilflich sein?

    Vielen Dank!

    Grüße Outi

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Outsider77“ ()

    Outsider77 schrieb:

    leider weiß ich nicht, wie das dort mit der Parameter-Übergabe funktioniert.


    VB.NET-Quellcode

    1. Dim p As New Process
    2. p.StartInfo.Arguments=found_Semi & " " & DXFPfadDE & "\Spezial\" & Kappen_Name.Replace(".sem", ".dxf") & " semi2dxf " & programm_pfad & "\procam\uc\PARAM.INI"
    3. p.StartInfo.FileName="C:\programme\procam\uc\ucw32.exe "
    @Outsider77 Gib Dir die Argumente vor Verwendung in einer MessageBox aus und überzeuge Dich von deren Richtigkeit.
    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!
    Vielen Dank für Eure Antworten!
    Ich habe mir die Argumente per MessageBox anzeigen lassen und soweit stimmen diese.
    Die Fehlermeldung bleibt aber leider.
    Jetzt habe ich eben die Ordner-Struktur vom WINXP-Rechner auf dem neuen nachgebaut und alle benötigten Dateien kopiert.
    Komischerweise klappt der Aufruf dann so, wie er auch auf dem XP-Rechner geschrieben war (siehe erster Post).
    So ganz verstehe ich das jetzt nicht...

    Outsider77 schrieb:

    und soweit stimmen diese.
    Setz mal StartInfo.WorkingDirectory auf den Pfad der Exe.
    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!
    @sonne75
    Die exe liegt üblicherweise im Program Files (x86)-Ordner, da hat es auch bei Vorhandensein aller benötigten Dateien nicht funktioniert.

    @RodFromGermany
    Danke, werde ich morgen direkt testen...

    Edit:
    Also ich gehe mal davon aus, dass Du die exe meinst, die in StartInfo.FileName genannt wird, und nicht die exe des vb-Proggis...
    Auch damit

    VB.NET-Quellcode

    1. Dim ucw_exe_pfad As String = programm_pfad & "\procam\uc\"
    2. Dim p As New Process
    3. p.StartInfo.Arguments = found_Semi & " " & SchneidetischPfadDE & "\" & Kappen_Name.Replace(".sem", ".dxf") & " semi2dxf " & programm_pfad & "\procam\uc\PARAM.INI"
    4. p.StartInfo.FileName = programm_pfad & "\procam\uc\ucw32.exe "
    5. p.StartInfo.WorkingDirectory = ucw_exe_pfad
    6. p.Start()

    bleibt es bei der Fehlermeldung.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Outsider77“ ()

    Outsider77 schrieb:


    Edit:
    Also ich gehe mal davon aus, dass Du die exe meinst, die in StartInfo.FileName genannt wird, und nicht die exe des vb-Proggis...

    VB.NET-Quellcode

    1. Dim ucw_exe_pfad As String = programm_pfad & "\procam\uc\"
    2. Dim p As New Process
    3. p.StartInfo.Arguments = found_Semi & " " & SchneidetischPfadDE & "\" & Artikelname.Replace(".sem", ".dxf") & " semi2dxf " & programm_pfad & "\procam\uc\PARAM.INI"
    4. p.StartInfo.FileName = programm_pfad & "\procam\uc\ucw32.exe "
    5. p.StartInfo.Verb = "runas"
    6. p.StartInfo.WorkingDirectory = ucw_exe_pfad
    7. p.Start()


    Ich habe mal noch das "Als Administrator ausführen" hinzugefügt, da laut Aussage des Software-Herstellers somit weitere Fehler vermieden werden können.
    Ist mein Aufbau oben denn soweit erstmal richtig?

    Outsider77 schrieb:

    erstmal richtig?
    Was brachte Deine praktische Erprobung?
    Hast Du Dich davon überzeugt, dass die Arguments-Property den korrekten String enthält?
    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!
    Die praktische Erprobung brachte zwar einen korrekten Funktions-Ablauf (Datei wird an den korrekten Zielort gewandelt).
    Allerdings ist das Ergebnis (der Inhalt) der gewandelten Datei nicht korrekt.
    Was mich dabei wundert ist, dass das Programm händisch gestartet und die Datei so gewandelt, das richtige Resultat erbringt.
    Gibt es eigentlich (außer den einzelnen Message-Boxen) einen Befehl, der mir den kompletten Aufruf mit samt den Argumenten als "Befehlszeile" ausgibt?

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

    Sieht aus, als wären iwelche Pfade

    Outsider77 schrieb:

    nicht korrekt
    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!

    Outsider77 schrieb:

    farblich
    Nein.
    Ich meine, dass Inhalte von Properties in Deinem Code (Variablenwerte), die Pfade sein sollen, ggf, falsch sind.
    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!
    So, es scheinen alle Probleme gelöst zu sein.
    Das Problem des falschen Ergebnisses in der gewandelten Datei waren fehlerhafte Settings in der auszuführenden exe-Datei (Asche auf mein Haupt).
    Das ursprüngliche Problem mit der Fehlermeldung aus meinem ersten Post konnte ich dadurch beheben, dass ich den Program Files (x86)-Ordner statt per

    VB.NET-Quellcode

    1. Environment.GetEnvironmentVariable("ProgramFiles(x86)")

    jetzt mit

    VB.NET-Quellcode

    1. "C:\PROGRA~2\"

    festlege. Der Unterschied besteht hierbei in dem Leerzeichen bei Program Files (x86), was anscheinend den Fehler auslöste.
    Gibt es denn eine Möglichkeit, dass

    VB.NET-Quellcode

    1. Environment.GetEnvironmentVariable("ProgramFiles(x86)")
    in abgewandelter Form trotzdem nutzen zu können?

    Danke für Eure Hilfe!

    Gruß Outi

    Outsider77 schrieb:

    in abgewandelter Form
    Probier mal dies:

    VB.NET-Quellcode

    1. MessageBox.Show(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86))
    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!

    Outsider77 schrieb:

    ist kein Member von
    Das kann ich mir aber nur schwer vorstellen.
    OK, im 2005er Studio gibt es die auch nicht. :/
    Probier mal

    VB.NET-Quellcode

    1. MessageBox.Show(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles))
    Dies funktioniert bei mir auch richtig:

    VB.NET-Quellcode

    1. MessageBox.Show(Environment.GetEnvironmentVariable("ProgramFiles(x86)"))

    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!

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

    VB.NET-Quellcode

    1. MessageBox.Show(Environment.GetEnvironmentVariable("ProgramFiles(x86)"))

    Das gibt mir
    C:\Program Files (x86)

    aus. Und ich vermute, dass hier die Leerzeichen das Problem verursachen, da jetzt die Fehlermeldung aus meinem ersten Post erscheint.
    Oder mache ich irgendwas anderes falsch (ok die Frage ist von Deiner Seite aus sicher schwer zu beantworten) ?

    Outsider77 schrieb:

    irgendwas anderes falsch
    Überprüf mal, ob diese Systemvariable ühaupt den richtigen Wert hat auf Deinem System (mit oder ohne Leerzeichen). Das sollte schon alles in sich richtig sein.
    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 schrieb:

    Überprüf mal, ob diese Systemvariable ühaupt den richtigen Wert hat auf Deinem System (mit oder ohne Leerzeichen). Das sollte schon alles in sich richtig sein.




    Sieht erstmal richtig aus, trotzdem erscheint die Fehlermeldung , wenn ich im Pfad der exe das Verzeichnis
    C:\Program Files (x86)
    per

    VB.NET-Quellcode

    1. Environment.GetEnvironmentVariable("ProgramFiles(x86)")
    zusammenbaue.
    Wie gesagt, mit
    C:\PROGRA~2
    funktioniert es.