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!