HOWTO: Konvertierung von EXE zu MSI für die Softwareverteilung am Beispiel WatchGuard SSLVPN

In diesem Blog-Artikel möchte ich beschreiben, wie eine EXE-Datei für die Softwareverteilung (z.B. via Azure InTune oder Gruppenrichtlinien) zu einer MSI-Datei konvertiert werden kann. Als Beispiel führe ich den WatchGuard SSLVPN Client 12.10.4 an, welcher nicht als MSI Installer von WatchGuard bereitgestellt wird.

Konvertierung von EXE zu MSI für die Softwareverteilung am Beispiel WatchGuard SSLVPN

  1. Laden Sie sich den aktuellen WatchGuard SSLVPN Client herunter (https://software.watchguard.com -> Firebox auswählen -> Paket herunterladen):

  2. Laden Sie die .NET SDK herunter und installieren Sie diese (https://dotnet.microsoft.com/en-us/download/dotnet/8.0)
  3. Installieren Sie im nächsten Schritt via Powershell „WiX“:
    dotnet tool install --global wix

    Optional – Prüfen der installierten „WiX“ Version:

    wix --version
  4. Legen Sie sich eine passende Ordnerstruktur an (in meinem Beispiel C:\Tools\wix\WG-SSLVPN\). Fügen Sie im gewählten Pfad den heruntergeladene WatchGuard SSLVPN Client ein. Erstellen Sie zusätzlich eine Text-Datei mit dem gleichen Dateinamen und der Endung XML:
  5. Kopieren Sie folgenden Inhalt in die XML-Datei und editieren Sie die Parameter der Zeilen 1-7 nach Bedarf.
    <?define name = "WatchGuard Mobile VPN with SSL client 12.10.4"?> <!-- Name des zu erstellenden Installers -->
    <?define exe = "WG-MVPN-SSL_12_10_4.exe"?> <!-- Name der Quell-Datei (EXE) -->
    <?define path = "C:\Tools\wix\WG-SSLVPN"?> <!-- gewähltes Verzeichnis -->
    <?define silentArgs = "/silent /verysilent /TASKS="desktopicon""?> <!-- Installationsparameter -->
    <?define version = "12.10.4"?> <!-- Versionsnummer -->
    <?define publisher = "WatchGuard"?> <!-- Herausgeber -->
    <?define guid = "aa946d90-2197-4da0-a66f-b856a2921bb6"?> <!-- eindeutiger Identifier -->
    
    <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
            <Package Name="$(var.name)" Manufacturer="$(var.publisher)" Version="$(var.version)"
                    UpgradeCode="$(var.guid)" Scope="perMachine">
    
                    <Media Id="1" Cabinet="setup.cab" EmbedCab="yes" />
    
                    <Property Id="ARPSYSTEMCOMPONENT" Value="1" />
    
                    <Feature Id="InstallFeature" Title="Install Feature">
                            <ComponentRef Id="file" />
                    </Feature>
    
                    <CustomAction Id="run_exe" Return="asyncWait" Execute="commit"
                            ExeCommand="$(var.silentArgs)" HideTarget="yes" Impersonate="no"
                            FileRef="executable" />
    
                    <InstallExecuteSequence>
                            <Custom Action="run_exe" After="InstallFiles"
                                    Condition="NOT Installed AND NOT REMOVE" />
                    </InstallExecuteSequence>
    
                    <StandardDirectory Id="TempFolder">
                            <Directory Id="INSTALLLOCATION" Name="$(var.guid)">
                                    <Component Id="file" DiskId="1">
                                            <File Id="executable" Name="$(var.exe)"
                                                    Source="$(var.path)\$(var.exe)" />
                                    </Component>
                            </Directory>
                    </StandardDirectory>
            </Package>
    </Wix>

    -GUID: Hier sollte ein eindeutiger Identifier generiert werden. Der Identifier muss auch für Updates des SSLVPN Clients weiterverwendet werden. Eine GUID können Sie sich wie folgt via Powershell generieren:

    [guid]::NewGuid().guid

    -Installationsparameter: „/silent /verysilent“ sind nötig für eine automatisierte Installation ohne Eingabeaufforderung. Fügen Sie wie im Beispiel noch „/TASKS=“desktopicon““ an, so wird automatisch eine Desktopverknüpfung für die User generiert. Mögliche Parameter hat mein Kollege im Blog-Artikel >> WatchGuard SSLVPN Silent Installation mit Parameterübergabe zusammengefasst.

  6. Erzeugen Sie den MSI-Installer via „WiX“ über die Powershell:
    wix build C:\Tools\wix\WG-SSLVPN\WG-MVPN-SSL_12_10_4.xml
  7. Prüfen Sie, ob die MSI-Datei im Verzeichnis erzeugt wurde. Vor einer automatisierten Verteilung sollte der Installer einmal manuell getestet werden.

Fazit

Über den veranschaulichten Weg kann sehr einfach eine EXE zu einer MSI konvertiert werden. Via MSI ist ein Rollout sowie die Aktualisierung sehr einfach via Gruppenrichtlinie oder ähnliche Tools möglich. Wenn möglich würde ich eine MSI vom Hersteller immer bevorzugen, da die Wandlung von EXE zu MSI eine weitere mögliche Fehlerquelle darstellt.

Wie Sie den SSLVPN Client via Gruppenrichtlinien verteilen, updaten und konfigurieren können, finden Sie in unserem Blog-Artikel >> HOWTO: Verteilung, Update und Konfiguration des WatchGuard SSLVPN Clients via Gruppenrichtlinien.

Quellen

Leave a Reply

Your email address will not be published. Required fields are marked *