Ich habe in der Systemsuche zwei Properties definiert. Beide prüfen auf einen Wert in der Registry und schreiben den Wert in die jeweilige Property.
Der erste schaut ob das .NET 2.0 Framework SP1 installiert ist. Das ist bei mir nicht der Fall; der angegebener Registry-Ordner (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727) existiert nicht - hier liefert mir MsiGetProperty
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.
Properties mit InstallScript verarbeiten
Started by
UNeverNo
, Aug 27 2008 15:41
5 replies to this topic
Posted 27 August 2008 - 15:41
QUOTE |
#1 |
zurück.
Der zweite prüft, ob auf dem PC ein SQL-Server installiert ist (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server, InstalledInstances). Dies ist der Fall. Nur liefert mir MsiGetProperty hier komischerweise gar nichts zurück.
Der Rückgabewert liefert aber
Der zweite prüft, ob auf dem PC ein SQL-Server installiert ist (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server, InstalledInstances). Dies ist der Fall. Nur liefert mir MsiGetProperty hier komischerweise gar nichts zurück.
Der Rückgabewert liefert aber
QUOTE |
Erfolg! |
Die Properties sollten doch eigentlich normal verfügbar sein, oder? Wäre das nicht der Fall müssten ja beide einen leeren Wert zurückliefern, was sie nicht tun...
Hier noch der Code:
CODE |
function MyFunction(hMSI) // Gehen Sie wie folgt vor: Lokale Variablen deklarieren. STRING strPropertyValue, strRes; LONG lngBufferSize, lngResult; begin lngBufferSize = 256; // Gehen Sie wie folgt vor: Schreiben Sie ein Skript, beim Aufrufen von MyFunction ausgeführt wird. lngResult = MsiGetProperty ( ISMSI_HANDLE , "DOTNETVERSION20SP1_INSTALLED" , strPropertyValue , lngBufferSize ); //lngResult = MsiGetProperty ( ISMSI_HANDLE , "SQLSERVER_INSTALLED" , strPropertyValue , lngBufferSize ); switch (lngResult) case ERROR_INVALID_HANDLE: strRes = "Handle!"; case ERROR_INVALID_PARAMETER: strRes = "Parameter!"; case ERROR_MORE_DATA: strRes = "Data!"; case ERROR_SUCCESS: strRes = "Erfolg!"; default: strRes = "Sonstiges!"; endswitch; MessageBox(strPropertyValue, INFORMATION); MessageBox(strRes, INFORMATION); end; |
Posted 28 August 2008 - 07:03
Ich würde es so schreiben:
CODE |
lngResult = MsiGetProperty ( hMSI , "DOTNETVERSION20SP1_INSTALLED" , strPropertyValue , lngBufferSize ); |
Du mußt das MSI-Handle "hMSI" auch verwenden!
Posted 28 August 2008 - 10:19
Hallo! Danke für Deine Antwort, aber das macht keinen Unterschied. In beiden Fällen das selbe Ergebnis.
Die Hilfe schreibt zu ISMSI_HANDLE:
Die Hilfe schreibt zu ISMSI_HANDLE:
QUOTE |
Diese Systemvariable speichert das Handle auf die MSI-Datenbank, die gerade ausgeführt wird. |
Posted 28 August 2008 - 10:22
Ich würde den Vorgang mal loggen lassen.
Dann weißt Du, wann sich welches Property wie ändert und was drinsteht.
Dann weißt Du, wann sich welches Property wie ändert und was drinsteht.
Posted 28 August 2008 - 13:25
Guter Tipp.
Das .NET SP1 gibt '1' lt. Log-Datei zurück, die MessageBox dann aber komischerweise '#1'.
Für den SQL-Server-Eintrag liefert er aber '', obwohl die gleiche Pfad-Abfrage über InstallScript funktioniert:
Das .NET SP1 gibt '1' lt. Log-Datei zurück, die MessageBox dann aber komischerweise '#1'.
Für den SQL-Server-Eintrag liefert er aber '', obwohl die gleiche Pfad-Abfrage über InstallScript funktioniert:
CODE |
GetRegKeyValue("SOFTWARE\\Microsoft\\Microsoft SQL Server", "InstalledInstances", strResult); |
Kann es sein, dass die Systemsuche keine Stringwerte verarbeiten kann?
Posted 09 September 2008 - 17:06
#1 bedeutet dass es ein DWORD-Wert ist. Der Typ des Registry-Eintrags wird duch ein Präfix angezeigt, siehe Hilfe zu "RegLocator Table":
Registry type
Prefix added by Installer
REG_SZ
None, but if the first character of the registry value is #, the installer escapes the character by prefixing a another #.
DWORD
"#" optionally followed by '+' or '-'
REG_EXPAND_SZ
"#%"
REG_MULTI_SZ
Null. The installer sets the property to a value beginning with a null and ending with a null.
REG_BINARY
"#x" In case of REG_BINARY, the installer converts and saves each hexadecimal digit (nibble) as an ASCII character prefixed by "#x".
Hast du das richtige Root eingestellt?
Registry type
Prefix added by Installer
REG_SZ
None, but if the first character of the registry value is #, the installer escapes the character by prefixing a another #.
DWORD
"#" optionally followed by '+' or '-'
REG_EXPAND_SZ
"#%"
REG_MULTI_SZ
Null. The installer sets the property to a value beginning with a null and ending with a null.
REG_BINARY
"#x" In case of REG_BINARY, the installer converts and saves each hexadecimal digit (nibble) as an ASCII character prefixed by "#x".
Hast du das richtige Root eingestellt?
Stefan Krüger
InstallSite.org twitter facebook