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

Properties mit InstallScript verarbeiten


5 replies to this topic

UNeverNo

UNeverNo
  • Full Members
  • 24 posts

Posted 27 August 2008 - 15:41

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
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
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;


mkkk

mkkk
  • Full Members
  • 63 posts

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!

UNeverNo

UNeverNo
  • Full Members
  • 24 posts

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:
QUOTE
Diese Systemvariable speichert das Handle auf die MSI-Datenbank, die gerade ausgeführt wird.


mkkk

mkkk
  • Full Members
  • 63 posts

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.

UNeverNo

UNeverNo
  • Full Members
  • 24 posts

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:
CODE
GetRegKeyValue("SOFTWARE\\Microsoft\\Microsoft SQL Server", "InstalledInstances", strResult);

Kann es sein, dass die Systemsuche keine Stringwerte verarbeiten kann? blink.gif

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

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?