Aufruf der msiexec.exe {parameter} aus VB6

Hallo!

Ich erstelle das Menüprogramm für eine selbststartende CD.
Der Anwender kann dann verschiedene Dokumente (PDFs) anschauen oder diverse Tools installieren.
Ich wäre auch fertig, wenn dieses eine Problem nicht wäre…

Eine dieser Dateien ist eine „msi“ und die kann ich, im Gegensatz zu den anderen Setup-dateien, irgendwie nicht aufrufen/öffnen.

Eine Setupdatei rufe ich mit folgender Zeile auf:

Call Shell(strPfadName, vbNormalFocus)

wobei strPfadname sowas wie „[CDLW]:\abc\def\setup.exe“ enthält.

Wenn ich das mit der msi versuche, erhalte ich die Fehlermeldung „Ungültiger Prozeduraufruf oder ungültiges Argument“.

Gut, nicht so einfach wie ich dachte…

Durch googlen fand ich dann einen Lösungsatz:
Die o.g. Zeile ist demnach korrekt, lediglich der Inhalt des Strings (Beispiel C:\x\y\abc.msi) nicht. - Ich soll/muss die „msiexec.exe“ mit Parametern und dem Pfad aufrufen. OK…

StrPfadname sieht nun so aus:

StrPfadname = "msiexec.exe /i " & Left(App.Path, 3) & "xxxx xxxxx\xxxxx\xxx\xxx xxx.msi"

Das Ergebnis ist das mir lediglich die Hilfe angezeigt wird, also das, was unter Start -> Ausführen „msiexec.exe /?“ ausgegeben wird.

Was mache ich falsch?

Achja, fast vergessen: Die CD wird nur unter 2000 und XP eingesetzt!

Danke für eure Anregungen,
Michael

Hallo Michael,

ist ja auch richtig so :smile:
Schaue dir mal die Parameter an :wink: und ändere dein Aufruf entsprechend dann klappt es :smile:

MfG Alex

Hallo Michael,

ist ja auch richtig so :smile:

Wenn es richtig wäre, würde das Setup starten… :-/

Schaue dir mal die Parameter an :wink:

Welche?

Die Hilfe sagt zum Aufbau lediglich
„msiexec /Option [Optionale Parameter]“
Dummerweise schweigt sie sich aus, was erforderliche und was optionale Parameter sind… *GRMPF*

Unter Optionen kommen IMHO nur /I oder /A in Frage, da ich nichts ankündigen oder deinstallieren will. (Ich tendiere zu /I)
Des weiteren würde ich gerne /QF verwenden, da der Benutzer sehen soll was gemacht wird.
/promptrestart wäre auch noch sinnvoll zu verwenden.

ergo:

Call Shell("msiexec /i /qf /promptrestart [CDLW]:\a\b\xyz.msi", vbNormalFocus) 

oder

Call Shell("msiexec /a /qf /promptrestart [CDLW]:\a\b\xyz.msi", vbNormalFocus) 

Alle anderen Optionen fallen weg, da ich kein Protokoll wünsche und es keine Aktualisierung oder Reparatur ist.

Auch Konstruktionen wie

Call Shell("msiexec /a [CDLW]:\a\b\xyz.msi /qf /promptrestart", vbNormalFocus) 

haben mich immer nur in das berüchtigte Fenster gebracht.

Ich wäre Dir sehr dankbar, wenn Du etwas genauer werden könntest.

Grüße,
Michael

FUNZT!
Hello again!

Ich will nur kurz sagen, das ich es zum laufen bekommen habe.

Ein einfaches

Call Shell("msiexec /i " & Left(App.Path, 3) & strnamePfad, vbNormalFocus)

reicht völlig.

Ich weiß nicht, ob ich von Blindheit geschlagen war oder einfach nur die Bäume den Waldblick verdeckten…

Wer nun wissen mag was der Fehler war:
Ein Ordername und der Dateiname enthielten (je) ein Blank…

Die von mir angesprochenen Optionen /qf /promptrestart gehören zu den „optionalen Parametern“ (try & error Ermittlung), so das sich die Zeile

Call Shell("msiexec /i " & Left(App.Path, 3) & strnamePfad & " /qf /promptrestart", vbNormalFocus)

ergibt.

Liebe Grüße,
Michael