Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

Windows Installer Version


9 replies to this topic

ANo

ANo
  • Full Members
  • 179 posts

Posted 20 March 2006 - 09:49

Halo, meine Frage:
Wie bestimme ich die WindowsInstaller Version (msiexec)? Danach suchen?
Oder gibt es bessere Möglichkeiten?

Ich benutze InstallShieldX, dies setzt auf den WindowsInstaller2.0 auf.
Wenn ich die MFC80 auf einem Windows 2000+SP4 System installieren möchte erhalte ich den Fehler 1723.
Installiere ich zuerst WindowsInstaller 3.1v2 auf dem System dann funktioniert meine Installation.

Ein InstallShield (10.5, etc.) größer InstallShieldX hat dieses Problem nicht.

MfG
André

ANo

ANo
  • Full Members
  • 179 posts

Posted 20 March 2006 - 14:08


Windows Installer Version bestimmen:

Bis jetzt suche ich in der Registry unter HKLM\\SYSTEM\\CurrentControlSet\\Services\\MSIServer
den Wert ImageData und bestimme daraus den Pfad.
Dann frage ich mit Pfad+MSI.dll die Version ab.

Der ValueType von ImageData ist allerdings Reg_Expand_SZ.
Vielleicht wird von Microsoft der Wert noch um Daten erweitert(?).

Würdet Ihr das anders machen?

MfG
André

ali

ali
  • Full Members
  • 1,008 posts

Posted 20 March 2006 - 14:42

Frag doch mal die Property "VersionMSI" ab.

ANo

ANo
  • Full Members
  • 179 posts

Posted 21 March 2006 - 10:13

Hallo Ali, danke für die Antwort.

Ich habe es schon über die Property "VersionMSI" probiert im Script.
Aber ich bekomme kein Ergebnis zurück.

Mit
nResult = MsiGetProperty (ISMSI_HANDLE, "VersionMSI", sValue, nBuffer);
bekomme ich keinen Fehler, alles ist ERROR_SUCCESS, aber der nBuffer=0 ???

Auch beim Suchen über die Tabellen wird die Property nicht gefunden.
Das ist seltsam.


(Der Weg über die Versionsnummer der MSI.dll zu gehen, wird auch in der ISX-Hilfe vorgeschlagen, unter anderem.)

Gruß André

ali

ali
  • Full Members
  • 1,008 posts

Posted 21 March 2006 - 10:20

Hm, im logging ist das Property ja immer gefüllt. Weiß aber auch nicht wann das gesetzt wird. Du könntest natürlich auch über die Systemsuche die Msi.dll abfragen, dann hast du auch den Patchlevel der MSI.

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 22 March 2006 - 11:23

Auf welchen Wert setzt du nBuffer vor dem MsiGetProperty Aufruf? Diese Variable gibt *vor dem Aufruf* an wie groß der Buffer ist den du übergibst, also wieviele Bytes Windows Instalelr maximal zurückliefern darf. *Nach* dem Aufruf steht dann drin wieviele Bytes er tatsächlich zurückgegeben hat.

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 22 March 2006 - 11:24

Abgesehen davon ist mir nicht klar warum du das im Skript machst. Verwende doch einfach eine LaunchCondition.

ANo

ANo
  • Full Members
  • 179 posts

Posted 23 March 2006 - 11:37

Hallo Ali und Stefan
vielen Dank für Eure Antworten.

a)
Ich benutze sehr viel InstallShieldScript, dies kann ich sehr gut verteilen in die einzelnen Projekte.

Die Funktion ist nur für Testzwecke gedacht.
Es sei denn, daß ich die MFC80 (WindowsInstaller 3.x) auf ein Windows2000+SP4 (WindowsInstaller 2.x) mit ISX (WindowsInstaller 2.x) installieren müsste.

Dann müsste ich dies vorher abchecken.

cool.gif
Ich habe eine allg. Fkt., die mir den benötigten Buffer bei einer Propertyabfrage bestimmt, und dann damit den Wert der Property holt.
Außerdem habe ich es mit der Vorgabe nBuffer=20 und =100 probiert.
<-- alles liefert keinen Wert für die Property VersionMSI

Sorry, ins Logfile habe ich noch nicht geschaut.
Nebenbei, die allg. Fkt. wird x-mal benutzt in den Scripten - und funktioniert.

c)
Im Augenblick bleibe ich bei der Abfrage der MSI.dll.


Viele Grüße
André



ANo

ANo
  • Full Members
  • 179 posts

Posted 23 March 2006 - 13:22

Hallo,
ich konnte das Problem klären:

nicht:
nResult = MsiGetProperty (ISMSI_HANDLE, "VersionMSI", sValue, nBuffer);

sondern so:
nResult = MsiGetProperty (ISMSI_HANDLE, "VersionMsi", sValue, nBuffer);

Ich habe ISX Prof. deutsch, vielleicht liegts daran.

Gruß
André



Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 23 March 2006 - 17:47

Das war mir zuvor in deinem Post nicht aufgefallen. Ja, das Property heisst VersionMsi. Das hat nichts mit der InstallShield-Sprache zu tun, sondern Microsoft hat die Namen der vordefinierten Properties festgelegt, und da kommt es immer auf die Groß/Kleinschreibung an.