Manchmal kann es vorkommen, dass in einem MSI alle GUIDs geändert werden müssen. Das kann bei umfangreichen MSI mit vielen Komponenten schnell viel Arbeit verursachen.

Glücklicherweise gibt es im PACE Suite MSI Generator die Möglichkeit Makros zu erstellen, welche solche Arbeiten schnell und zuverlässig erledigen.

Active scripting

Makros sind in PACE unter dem Punkt „Active scripting“ im Hauptmenü zu finden.

PACE Suite - Active Scripting

Ein Klick auf „Active scripting…“ öffnet den folgenden Dialog, in welchem einige im Standard Lieferumfang enthaltenen Makros aufgelistet sind.

PACE Suite - Available Scripts

Sobald auf „Add“ geklickt wurde, wird man zum nächsten Dialog weitergeleitet in welchem ein paar grundsätzliche Infos zum neuen Makro oder Scriptlet wie es in PACE genannt wird, erfasst werden können.

PACE Suite - Add scriptlet

Script File

Aus meiner Sicht ist es empfehlenswert für jedes Scriptlet ein eigenes „Script file“ zu erstellen wie in diesem Beispiel gezeigt. Das macht die Wartung einfacher. Danach kann der gewünschte Editor ausgewählt, der Anzeigename und der Funktionsname eingetragen werden. Schon kann es mit dem Makro losgehen.

Sub ChangeUID()
'--------------------------------------------------------------------
' Purpose: Change GUIDS
' Date: 04.2018
' Version: 1.0
' Author: clearByte GmbH, www.clearbyte.ch
'--------------------------------------------------------------------
'Declaration ----
   Dim view, record
   Dim oldId
   Dim oldProdCode, oldUpgrCode
'Processing ----
   'Change ProductCode
   oldProdCode = fGetProperty("ProductCode",2)
   UpdateData database, "UPDATE `Property` SET `Property`.`Value` = '" & GenerateGuid() & "' WHERE `Property`.`Value` = '" & oldProdCode & "'"
   'Change upgradecode
   oldUpgrCode = fGetProperty("UpgradeCode",2)
   UpdateData database, "UPDATE `Property` SET `Property`.`Value` = '"& GenerateGUID() &"' WHERE `Property`.`Value` = '" & oldUpgrCode & "'"
   'Change PackageCode
   fChangePkgCode
   'Change Component codes
   Set view = database.OpenView("SELECT * FROM `Component`")
   view.Execute
   Set record = view.Fetch
   Do While (Not record Is Nothing)
      oldId = record.StringData(2)
      UpdateData database, "UPDATE `Component` SET `ComponentId` = '"& GenerateGUID() &"' WHERE `ComponentId` = '" & oldId & "'"
      Set record = view.Fetch
   Loop
End Sub

In diesem Script werden sowohl zwei eigene Funktionen (fGetProperty, fChangePkgCode) als auch die allgemein verfügbare Funktion GenerateGUID() verwendet.

'FUNCTIONS
Function fGetProperty(ByVal sProperty, ByVal sReturn)
   'Declaration ----
   Dim fView, fRecord
   'Init ----
   Set fView = database.OpenView("SELECT Property,Value FROM Property WHERE Property = '"&sProperty&"'")
   fView.Execute
   Set fRecord = fView.Fetch
   'main ----
   If fRecord Is Nothing Then
      fGetProperty = ""
   Else
      fGetProperty = fRecord.StringData(sReturn)
   End If
   Set fRecord = Nothing
End Function
Function fChangePkgCode()
   'Declaration ----
   Dim sumInfo
   'Init ----
   Set sumInfo = database.SummaryInformation(1)
   'Processing ----
   sumInfo.Property(9) = GenerateGUID()
   sumInfo.Persist
   database.Commit
End Function

Ich hoffe, dass dem einen oder anderen dieses Script weiter hilft.

This Area is Widget-Ready

You can place here any widget you want!

You can also display any layout saved in Divi Library.

Let’s try with contact form: