Hallo,
ich habe den folgenden Use Case:
Wir erstellen für unsere internen Kunden Software, die über Empirum verteilt werden soll. Diese Software wird von einem Build System erstellt und sollte dann automatisiert als Paket in Empirum zur Verfügung stehen.
Was wäre der korrekte Ansatz?
Im Moment ist mein Ansatz:
- MSI Dateien werden von Build erstellt
- Setup.inf wird von einem Skript generiert
- Ordnerstruktur wird auf Zielserver kopiert
Jetzt ist mir allerdings aufgefallen, dass MSI Pakate über die Product Id (GUID) deinstalliert werden, wenn ich ein Paket mit dem Package Wizard erstelle. Diese ID wird allerdings erst beim Build erstellt und ist daher dynamisch. Das Auslesen der ID aus einem MSI Paket ist auch nicht trivial, wie ich festgestellt habe.
Hat jemand eine Idee, wie ich das besser lösen kann (ausser die Pakete jedes mal manuell mit dem Package Wizard zu erstellen?)
Automatisierte Paketierung von MSI Installern
-
- Posts: 4
- Joined: 02. Dec 2022, 08:26
- Contact:
-
- Posts: 4
- Joined: 02. Dec 2022, 08:26
- Contact:
Re: Automatisierte Paketierung von MSI Installern
Perfekt, danke. Damit sollte ich die Product ID automatisiert auslesen können.
-
- Posts: 4
- Joined: 02. Dec 2022, 08:26
- Contact:
Re: Automatisierte Paketierung von MSI Installern
Für alle Interessierten, diese PowerShell Funktion liefert die Product Id aus einem MSI:
Code: Select all
function Get-MsiProductCode {
param (
[IO.FileInfo] $FilePath
)
try {
$windowsInstaller = New-Object -com WindowsInstaller.Installer
$database = $windowsInstaller.GetType().InvokeMember(
“OpenDatabase”, “InvokeMethod”, $Null,
$windowsInstaller, @($FilePath.FullName, 0)
)
$q = "SELECT Value FROM Property WHERE Property = 'ProductCode'"
$View = $database.GetType().InvokeMember(
“OpenView”, “InvokeMethod”, $Null, $database, ($q)
)
$View.GetType().InvokeMember(“Execute”, “InvokeMethod”, $Null, $View, $Null)
$record = $View.GetType().InvokeMember(
“Fetch”, “InvokeMethod”, $Null, $View, $Null
)
$global:ProductCode = $record.GetType().InvokeMember(
“StringData”, “GetProperty”, $Null, $record, 1
)
} catch {
throw "Failed to get MSI file version the error was: {0}." -f $_
}
}
Who is online
Users browsing this forum: Bing [Bot] and 3 guests