Entwickler-Ecke
Dateizugriff - Problem mit Installsheeld file ausführen
Cyrus - Mo 06.10.03 09:26
Titel: Problem mit Installsheeld file ausführen
Hallo Leute
Ich arbeite gerade an einem Setup welches andere Setups ausführt. Das setup an welchem ich arbeite ist in Delphi Programmiert und die Setups die ich ausfürhenlassen möchte sind mit InstallSheeld gemacht. Da ich mehere Installsheeld Setups nacheinander installieren will habe ich folgende Funktion verwendet:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| function StartAssociatedExe(FileName: string; var ErrorCode: Cardinal): Boolean; var Prg: string; ProcessInfo: TProcessInformation; StartupInfo: TStartupInfo; begin SetLength(Prg, MAX_PATH); Result := False; ErrorCode := FindExecutable(PChar(FileName), nil, PChar(Prg)); if ErrorCode >= 32 then begin SetLength(Prg, StrLen(PChar(Prg))); FillChar(StartupInfo, SizeOf(TStartupInfo), 0); with StartupInfo do begin cb := SizeOf(TStartupInfo); wShowWindow := SW_SHOW; end; if CreateProcess(PChar(Prg), PChar(Format('%s %s', [Prg, FileName])), nil, nil, False, NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then begin WaitForSingleObject(ProcessInfo.hProcess, INFINITE); GetExitCodeProcess(ProcessInfo.hProcess, ErrorCode); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); Result := True; end else ErrorCode := GetLastError; end; end; |
Ich habe es mit anderen exe files versucht funktioniert einwandfrei nur mit exe files welche mit installsheeld gemacht wurden geht es nicht ich erhalte folgende Fehlermeldung:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Parameter der Befehlszeile: /L Sprach-ID /S Blenden Sie das Initialisierungsdialogfeld aus. Für die Verwendung im Silent Mode: /S /v/qn. /V Parameter für MsiExec.exe /UA<url to InstMsiA.exe> /UW<url to InstMsiW.exe> /UM<url to msi package> /US<url to IsScript.msi> |
Kann mir jemand sagen was ich machen muss damit es funktioniert?
Danke für eure Hilfe
Greetz Cyrus
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
Delete - Di 07.10.03 09:04
Titel: Re: Problem mit Installsheeld file ausführen
Cyrus hat folgendes geschrieben: |
Hallo Leute
Ich arbeite gerade an einem Setup welches andere Setups ausführt. Das setup an welchem ich arbeite ist in Delphi Programmiert und die Setups die ich ausfürhenlassen möchte sind mit InstallSheeld gemacht. Da ich mehere Installsheeld Setups nacheinander installieren will habe ich folgende Funktion verwendet:
[...]
Ich habe es mit anderen exe files versucht funktioniert einwandfrei nur mit exe files welche mit installsheeld gemacht wurden geht es nicht ich erhalte folgende Fehlermeldung:
[...] |
Mich würde mal eine Anweisung im Klartext interessieren. Hast du eigentlich mal versucht, dieses InstallShield-Paket von Hand zu starten, so wie es dein Programm versucht. Die Fehlermeldung deutet nämlich darauf hin, dass der MsiExec-Starter Parameter bekommt, mit denen er nichts anfangen kann.
Ich würde dich also mal bitten, dass du dir eins dieser Setup nimmst und mal versuchst, das was deine Funktion macht, per Hand zu probieren. Dann kommst du vielleicht hinter die Ursache.
Nummer #2 ist: Offenbar handelt es sich um die "InstallShield for MSI"-Version. (Die Fehlermeldung bezüglich "MsiExec" deutet darauf hin.) Wenn es sich bei deinem Setup also um eine MSI-Datei handelt, dann gibt es passende Funktionen aus der MSI-API, mit denen du solche Setups starten kannst.
ZuguterLetztlesensichSätzeohneKommaechtbeschissen.UmdirdaszuzeigenhabeichhiermalaufLeerzeichenverzichtet.Denkmaldarübernach!
Gruß.
Tino - Di 07.10.03 09:42
Titel: Re: Problem mit Installsheeld file ausführen
Hallo!
MathiasSimmack hat folgendes geschrieben: |
Nummer #2 ist: Offenbar handelt es sich um die "InstallShield for MSI"-Version. (Die Fehlermeldung bezüglich "MsiExec" deutet darauf hin.) Wenn es sich bei deinem Setup also um eine MSI-Datei handelt, dann gibt es passende Funktionen aus der MSI-API, mit denen du solche Setups starten kannst. |
Ich glaube in diesem Fall kann er die MSI-API aber nicht benutzen da die Fehlermeldung darauf schließen läßt das sich das MSI-File in einer Setup.exe ähnlichen Datei befindet.
Gruß
Tino
Delete - Di 07.10.03 10:37
Das ist nicht gesagt, Tino. Wenn du mal in die Registry schaust, dann siehst du, dass zum Installieren einer MSI-Datei der Parameter "/i" zusätzlich erforderlich ist. Der Aufruf von
erzeugt bei mir ebenfalls eine Fehlermeldung bezüglich ungültiger Parameter. Aber abgesehen davon: niemand außer Cyrus weiß hier, um was für Dateien es sich handelt. Und darum sagte ich ja auch, er soll den Aufruf mal per Hand probieren. Was passiert, wenn eine lauffähige EXE versucht, das für sie zuständige Programm zu finden?
Delphi-Quelltext
1:
| ErrorCode := FindExecutable(PChar(FileName), nil, PChar(Prg)); |
Meine Vermutung wäre, dass der Name der EXE selbst zurückgeliefert wird. Ich hab´s nicht probiert. Aber wen dem so ist, dann würde das bedeuten, das Programm startet mit sich selbst als Parameter:
Delphi-Quelltext
1:
| if CreateProcess(PChar(Prg), PChar(Format('%s %s', [Prg, FileName])), |
Dieser Vermutung widerspricht allerdings das folgende Zitat:
Cyrus hat folgendes geschrieben: |
Ich habe es mit anderen exe files versucht funktioniert einwandfrei nur mit exe files welche mit installsheeld gemacht wurden geht es nicht |
:?
Tino - Mi 08.10.03 08:36
Ich gehe davon aus das er die MSI API nicht nutzen kann da sich die MSI Datei in einer EXE Datei als Resource oder so befindet und somit nicht direkt ansprechbar ist.
Gruß
Tino
Cyrus - Mi 22.10.03 09:23
sorry für die späte antwort ich war eben in den Ferien!
es handelt sich nicht um msi files sondern um exe files welche man mit IS generieren kann. Diese kann man auch starten z.b. mit shellexecute oder winexec. Somit kann man auch die MSI API nicht nutzen da es sich ja nicht um msi files handelt
Greetz Cyrus
Delete - Mi 22.10.03 10:05
Ich wiederhole mich noch mal:
MathiasSimmack hat folgendes geschrieben: |
Was passiert, wenn eine lauffähige EXE versucht, das für sie zuständige Programm zu finden?
Delphi-Quelltext 1:
| ErrorCode := FindExecutable(PChar(FileName), nil, PChar(Prg)); |
Meine Vermutung wäre, dass der Name der EXE selbst zurückgeliefert wird. Ich hab´s nicht probiert. Aber wen dem so ist, dann würde das bedeuten, das Programm startet mit sich selbst als Parameter:
Delphi-Quelltext 1:
| if CreateProcess(PChar(Prg), PChar(Format('%s %s', [Prg, FileName])), | |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!