Autor Beitrag
Cyrus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 56



BeitragVerfasst: Mo 06.10.03 09:26 
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:
ausblenden volle Höhe 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: stringvar 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])), 
      nilnil, False, NORMAL_PRIORITY_CLASS, nilnil, 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:
ausblenden 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 user profile iconTino: Code- durch Delphi-Tags ersetzt.

_________________
Wer glaub er ist, hört auf zu werden!
Delphi Rulez!!!
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 07.10.03 09:04 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Di 07.10.03 09:42 
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
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ausblenden Quelltext
1:
msiexec MSI-Datei					

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?
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 56



BeitragVerfasst: 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

_________________
Wer glaub er ist, hört auf zu werden!
Delphi Rulez!!!
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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?
ausblenden 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:
ausblenden Delphi-Quelltext
1:
if CreateProcess(PChar(Prg), PChar(Format('%s %s', [Prg, FileName])), { ...}