Der folgende Artikel soll einen kurzen technischen Einstieg in die neue Version des Microsoft Installer liefern. In einem folgenden Artikel wird auf Werkzeuge und Methoden eingegangen, MSIX Pakete zu erzeugen oder bestehende Softwarepakete (MSI / Setup) in das neue Format zu migrieren.
Einführung
Microsoft hat auf dem Microsoft Developer Day im März 2018 die Zukunft der Softwareinstallation für Windows 10 basierte Geräte vorgestellt. MSIX ist eine vollständige „Containerisierungslösung“, welche alle großen Features von Universal Windows Plattform (UWP) übernimmt. Unterstützt werden Desktop, mobile und alle anderen Windows 10 – Geräte.
Technisch gesehen basiert MSIX auf dem AppX Paket Framework (ursprünglich lediglich für UWP Anwendungen verwendet) und wurde entwickelt, um klassische Windows Anwendungen besser zu unterstützen.
Die Bezeichnung MSIX leitet sich aus den beiden Technologien MSI und Appx ab.
Der neue Installationsdienst soll die besten Features der bisherigen Installationsmethoden in sich vereinen.
Features
Das neue Paket Format bietet einige neue Features von denen einige hier kurz erwähnt werden sollen.
- Vollständige Deinstallierbarkeit: Aufgrund der Nutzung des MSIX Containerformates ist es möglich, eine auf einem System installierte Anwendung rückstandsfrei zu deinstallieren
- Plattformunterstützung: Unterstützt werden (zukünftig) sowohl Microsoft Windows, MAC, iOS, Android und Linux Systeme
- AppX Kompatibilität: MSIX Pakete können über den Microsoft Windows Store bzw. den Store for Business bereitgestellt werden
- Ressourcen-Optimierung: Die Verwendung von MSIX minimiert sowohl die Netzwerklast, als auch den benötigten Speicherplatz auf dem lokalen System. Bei der Installation von Updates z.B. werden nur Deltas und nicht die gesamten Massendaten übertragen. Darüber hinaus findet eine Versionsverwaltung von z.B. DLL Dateien, die auf einem Client installiert werden statt, so dass diese nur einmal vorgehalten werden müssen.
- Streaming Installation: Installationen können direkt von einem Share oder einem Web Server installiert werden, ohne die Installationssourcen vorher auf dem Rechner zu cachen. Hierdurch wird weniger Speicherplatz auf dem Zielsystem benötigt.
- Silent Background Update: Durch dieses Feature ist es möglich, Anwendungsupdates im Hintergrund während des Betriebs der Anwendung zu installieren.
Der MSIX Container
Eine typische Win32 Applikation hat direkten Zugriff auf den Kernel, die NTUSER, GDI etc.
Ein Weg, um das System abzusichern, ist nun die Verwendung eines isolierten Kernels wie die Bereitstellung über den Windows Defender Application Guard (WDAG). Hierin betriebene Anwendungen sind komplett vom Betriebssystem isoliert, folglich macht diese Verwendung auch nur für bestimmte Applikationen - die keinen Zugriff auf das System erfordern - Sinn.
Vor einiger Zeit hat Microsoft den Desktop Bridge Container eingeführt. Dieser bietet Zugriffe für die Appikation auf gesicherte Dateisystem und Registry Filter. So ist die Applikation in der Lage, erforderlichen Lese- und Schreibvorgänge im Datei und Registry System durchzuführen, sie kann aber z.B. keine Änderungen an der Registry einer anderen Applikation vornehmen.
Ein anderer Weg ist die Verwendung des restriktiverem UWP App Containers mit einem eigenen Resource and Capability Management. Hierbei werden sämtliche Zugriffe, die eine Anwendung erfordert, über Manifest Dateien definiert.
Der MSIX Container ist eine Kombination aus des Desktop Bridge und dem UWP App Container.
Eine Win32-Applikation, die über das MSIX Format bereitgestellt wird, lässt sich selbstverständlich auch weiterhin nur auf Windows Desktop Systemen installieren und ausführen. Konvertierte Apps werden nicht alleine durch den Wechsel auf das MSIX Bereitstellungsformat zur UWP und lassen sich demnach nicht auf Tablets oder Smartphones ausführen. Hierfür sind Anpassungen an der Applikationsarchitektur erforderlich.
Genau wie UWP Apps können konvertierte Anwendungen auf die UWP APIs zugreifen. Win32-Applikationen können jedoch lediglich die Desktop APIs nutzen, während vollständige UWP Applikationen auf unterschiedliche APIs(Mobile Device APIs, Xbox, etc.) zugreifen können.
MSIX – Paketaufbau
Die folgende Abbildung zeigt den minimalen Inhalt einer entpackten MSIX Datei.
- Assets – In diesem Verzeichnis sollten alle grafischen Bestandteile des Pakets abgelegt sein
- VFS (Virtual File System) – Dieses Verzeichnis enthält die Anwendungsdateien wie Binaries, Config – Dateien, DLLs Bibliotheken etc.
- [Content_Types].xml – Diese Datei beinhaltet Informationen zu den Inhaltstypen eines MSIX Paketes, die während der Installation verwendet werden
- AppxBlockMap.xml – Diese Datei enthält eine Liste der Anwendungsbinaries samt zugehöriger Hashwerte zur Integritätsprüfung. Bei Updates wird diese Datei herangezogen, um zu überprüfen, welche Dateien auf das Zielsystem übertragen werden müssen (differentielles Update)
- AppxManifest.xml – Bei dieser Datei handelt es sich um die wichtigste Datei des Paketes. Sie enthält alle Informationen die für die Installation der Anwendung und den Betrieb erforderlich sind
- AppxSignature.p7x – Die Datei enthält Informationen zu der digitalen Signatur des Pakets
- Registry.dat – Diese Datei enthält die Änderungen des HKLM Hives. Falls ein Paket Änderungen in der User Registry vornimmt, existieren hier weitere Dateien mit entsprechenden Namen (z.B. User.dat)
- Resources.pri – Dieses Objekt enthält Informationen zu Anwendungsressourcen wie z.B. Pfaden zu zusätzlichen Ressource Dateien
Soviel zur "Theorie" über das neue Paketformat. Wie bereits oben angekündigt, werden sich die folgenden Artikel dann mit der "Praxis" beschäftigen und beschreiben, mit welchen Werkzeugen und Methoden MSIX-Pakete erzeugt werden oder wie bestehende Pakete in das Format migriert werden können.