Nachdem ich bereits im letzten Artikel (Makros für PACE Suite MSI Editor) versucht habe, einen kurzen Einblick in die PACE Suite Makros zu geben, folgen hier nun ein paar weitere kleine Script Beispiel.
Property auslesen
Wie der Name schon sagt, kann mit dieser Funktion der Wert einer bestimmten Property aus der Property Tabelle ausgelesen werden.
Function getProperty(sProperty) 'declaration ---- Dim view, record 'init ---- Set view = database.Openview("Select Property,Value FROM Property WHERE Property = '"&sProperty&"'") view.execute Set record = view.fetch 'processing ---- If record is Nothing Then getProperty = "" Else getProperty = record.StringData(2) End If set record = Nothing End Function
Der Aufruf dieser Funktion aus einem Makro sieht dann z.B. folgendermassen aus:
msgbox getProperty("Manufacturer")
Hier wird der Wert der Property „Manufacturer“ ausgelesen und in einer Messagebox angezeigt. Im Fall von 7Zip würde dann an dieser Stelle „Igor Pavlov“ angezeigt werden.
Default Properties setzen
Mit diesem Makro werden ein paar Properties in die Property Tabelle geschrieben. Dies geschieht nur, wenn die Property nicht schon existiert.
sub setDefaultProperties() 'declaration ---- dim arrProperties, arrSingleProperty, strDefaultProperties 'init ---- strDefaultProperties = "ROOTDRIVE;C:\|ARPNOMODIFY;1|REBOOT;ReallySuppress|ARPNOREPAIR;1|MSIDISABLERMRESTART;1|ARPNOREMOVE;1|MSIFASTINSTALL;7|MSIRESTARTMANAGERCONTROL;DisableShutdown|MSIRMSHUTDOWN;2|ALLUSERS;1" arrProperties = split(strDefaultProperties,"|") 'processing ---- for i = 0 to ubound(arrProperties) 'split single property arrSingleProperty = split(arrProperties(i),";") 'check properties If fCheckExist("Property","Property",arrSingleProperty(0)) = False Then 'if not existing, create it UpdateData database, "INSERT INTO `Property` (`Property`, `Value`) VALUES ('" & arrSingleProperty(0) & "', '" & arrSingleProperty(1) & "')" else 'if existing, update it UpdateData database, "UPDATE `Property` SET `Property`.`Value`='" & arrSingleProperty(1) & "' WHERE `Property`.`Property`='" & arrSingleProperty(0) & "'" End If 'msgbox "property " & arrSingleProperty(0) & " value " & arrSingleProperty(1) next End Sub Function fCheckExist(byVal sTable, byVal sColumn, byVal sValue) 'Purpose: checks for a certain value in a table 'declaration ---- Dim view, record, sQuery 'init ---- sQuery = "Select * From "&sTable&" WHERE "&sColumn&" = '"&sValue&"'" 'main ---- fCheckExist = False Set view = database.OpenView(sQuery) view.Execute Set record = view.Fetch If record is Nothing Then fCheckExist = False Else fCheckExist = True End If End Function
Viel Spass beim täglichen Packaging Einsatz mit der PACE Suite!