C-Sharp - EXE -ERROR in Installshield CustomAction wegen abschließendem Backslash aus INSTALLDIR
Hallo @ All
Ich verwende eine selbst erstellte C#-exe (Konsole) in einer Installshield CustomAction.
Die exe liegt in SupportFiles [SUPPORTDIR] und ich spreche sie in einer Type 34 CA (Path referencing a directory) im Deferred Execution -Modus an.
Der Aufruf schaut so aus:
"[SUPPORTDIR]\meine.exe" "[INSTALLDIR]" -install
exemplarisch ausgeschrieben:
"C:\Users\MeinUser\AppData\Local\Temp\{GUID}\meine.exe" "C:\ProgramFiles\Meine Fonts\" -install
Ich bekomme darauf hin einen Error in meiner Exe. Sie kann den gegebenen Pfad (INSTALLDIR) nicht verarbeiten kann.
Der Fehler liegt am abschließenden "\" (Backslash) im Pfad, den Installshield leider nur so bereit stellt. Die 2 Argumente "[INSTALLDIR]" und -install werden wegen des abschließenden Backslash als ein einziges Argument erkannt:
genau so: C:\ProgramFiles\Meine Fonts\" -install
Den Fehler fange ich meiner MSI derzeit so ab, dass ich die Files in einem SubFolder (Component) ablege und in der CA so aufrufe:
"[SUPPORTDIR]\meine.exe" "[INSTALLDIR]Fonts" -install
Das ist aber nur ein Workarround.
Nun meine Frage:
Wie kann ich das im meiner Exe abfangen sodass die 2 Argumente auch als 2 Argumente erkannt werden trotz des angehängten Backslash? Ich hoffe, dass sich das vor dem Verarbeiten der Args in der MAIN schon abfangen lässt und nicht erst durch umständliches Aufdröseln in der MAIN.
Bin dankbar für jeden Hinweis!
Grüße!
Mayho
Ich verwende eine selbst erstellte C#-exe (Konsole) in einer Installshield CustomAction.
Die exe liegt in SupportFiles [SUPPORTDIR] und ich spreche sie in einer Type 34 CA (Path referencing a directory) im Deferred Execution -Modus an.
Der Aufruf schaut so aus:
"[SUPPORTDIR]\meine.exe" "[INSTALLDIR]" -install
exemplarisch ausgeschrieben:
"C:\Users\MeinUser\AppData\Local\Temp\{GUID}\meine.exe" "C:\ProgramFiles\Meine Fonts\" -install
Ich bekomme darauf hin einen Error in meiner Exe. Sie kann den gegebenen Pfad (INSTALLDIR) nicht verarbeiten kann.
Der Fehler liegt am abschließenden "\" (Backslash) im Pfad, den Installshield leider nur so bereit stellt. Die 2 Argumente "[INSTALLDIR]" und -install werden wegen des abschließenden Backslash als ein einziges Argument erkannt:
genau so: C:\ProgramFiles\Meine Fonts\" -install
Den Fehler fange ich meiner MSI derzeit so ab, dass ich die Files in einem SubFolder (Component) ablege und in der CA so aufrufe:
"[SUPPORTDIR]\meine.exe" "[INSTALLDIR]Fonts" -install
Das ist aber nur ein Workarround.
Nun meine Frage:
Wie kann ich das im meiner Exe abfangen sodass die 2 Argumente auch als 2 Argumente erkannt werden trotz des angehängten Backslash? Ich hoffe, dass sich das vor dem Verarbeiten der Args in der MAIN schon abfangen lässt und nicht erst durch umständliches Aufdröseln in der MAIN.
Bin dankbar für jeden Hinweis!
Grüße!
Mayho
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 560810
Url: https://administrator.de/forum/c-sharp-exe-error-in-installshield-customaction-wegen-abschliessendem-backslash-aus-installdir-560810.html
Ausgedruckt am: 02.04.2025 um 05:04 Uhr
5 Kommentare
Neuester Kommentar

Zusätzlichen Backslash hinzufügen sollte reichen, dann ist das Anführungszeichen nicht mehr escaped und die Argumente sollten wieder einzeln übergeben werden.
"[SUPPORTDIR]\meine.exe" "[INSTALLDIR]\" -install

Zitat von @mayho33:
Vereinfacht die Sache zwar ungemein in der CA, aber irgendwie knabbere ich doch noch am Code der Exe. Muss doch möglich sein das Escapen des fehlerhaften Arguments abzufangen ohne die Args zu bearbeiten...oder nicht?
Ich würde es halt gerne wasserdicht haben. Ich bin nicht der einzige bei uns der MSIs bastelt.
Dann stütze dich eben nicht auf das args Array sondern Parse den kompletten Argumente-String als ganzes via Regex mit Submatches, mach ich öfter so. Dann ist es egal ob die Argumente als ein einziges oder als mehrere Elemente vorliegen, dann ist das auch wasserdicht, "wenn" dein Regex es auch ist Vereinfacht die Sache zwar ungemein in der CA, aber irgendwie knabbere ich doch noch am Code der Exe. Muss doch möglich sein das Escapen des fehlerhaften Arguments abzufangen ohne die Args zu bearbeiten...oder nicht?
Ich würde es halt gerne wasserdicht haben. Ich bin nicht der einzige bei uns der MSIs bastelt.