Windows Installer API (SDK)

Wie erstelle ich eine MSI Datenbank?

Dazu gibt es mehrere Wege. Der bequemste ist sicherlich, ein speziell dafür optimiertes Programm zu erwerben. Es gibt Hersteller / Autoren, die Editoren für MSI-Dateien bereithalten, wie z. B. Orca, SuperOrca, InstEd. Weitere Produkte sind Flexera Software mit dem Produkt AdminStudio, Advanced Installer von Caphyon, Wise Installer von Symantec [RIP], AKInstallerMSI von AKApplications und InstallAware von InstallAware Software Corporation. Ab Visual Studio .NET bietet Microsoft z.B. für alle in Visual Studio erzeugten Programme die Möglichkeit an, mit einem in Visual Studio integrierten Tool MSI-Datenbanken zu erzeugen.

Diese können zwar die Bereitstellung von SW-Paketen vereinfachen, sind jedoch immer noch zeitaufwändig und der Umgang selbst muss gelernt werden. Einige dieser Produkte sind Freeware, andere kosten Geld und der Rest kostet ein halbes Vermögen. Manche versprechen die Glückseligkeit, manche möchte man nicht a mal mit der Beisszange anfassen.

Wer sich ernsthaft mit diesem Thema beschäftigt, kommt nicht drum herum, sich einmal das "Windows Installer SDK" von Microsoft herunterzuladen, in dem die Windows Installer-Technologie dokumentiert ist, und auch Tools angeboten werden, mit denen man Unterstützung bei der Arbeit findet. Das Wichtigste ist sicherlich "Orca", ein Programm zum Bearbeiten von MSI-Datenbanken. Auch das alles kostenlos. Mithilfe des Windows Installer SDK ist es sogar möglich, von Grund auf neue MSI-Datenbanken "von Hand" herzustellen, was jedoch einen enormen Aufwand darstellen kann.



die Windows Installer API automatisiert

Komplexität

bezeichnet allgemein die Eigenschaft eines Systems oder Modells, dessen Gesamtverhalten man selbst dann nicht eindeutig beschreiben kann, wenn man vollständige Informationen über seine Einzelkomponenten und ihre Wechselwirkungen besitzt. Komplexität ist eine mögliche Form eines Gegenteils von Einfachheit, Determinierbarkeit und der Überschaubarkeit.

Effektivität

Effektiv arbeiten bedeutet, so zu arbeiten, dass ein angestrebtes Ergebnis erreicht wird. Effizient arbeiten bedeutet, so zu arbeiten, dass erzieltes Ergebnis und eingesetzte Mittel in einem optimalen Kosten-Nutzen-Verhältnis stehen und der Nutzen dabei größer ist als die Kosten (ökonomisches Prinzip). Wobei sich die Kosten nicht ausschließlich auf monetäre Mittel beziehen, sondern auf alle negativen Konsequenzen der Aktion.

Automatismen

sind definiert als Abläufe, die sich einer bewussten Kontrolle weitgehend entziehen. Automatismen wird eine Nähe zur Ökonomie nachgesagt. Ihr "Mehrwert" beruht auf der Ersparnis an Aufwand, ihr Gewinn liegt unmittelbar auf der Hand: Sie reduzieren die Komplexität von Abläufen und erhöhen den "Umsatz" an reibungslos ablaufenden Prozessen. Automatismen bringen – quasi im Rücken der Beteiligten – neue Strukturen hervor.

Paradigma

Ein Programmierparadigma ist ein fundamentaler Programmierstil und unterscheiden sich durch ihre Konzepte von statischen (wie z.B. Objekte, Methoden, Variablen, Konstanten) und dynamischen (wie z.B. Zuweisungen, Kontrollfluss, Datenfluss) Programmelementen. Es gibt noch eine Reihe weiterer Kriterien für die Entwicklung einer möglichst fehlerfreien und wartbaren Software - wie z.B. Lesbarkeit des Programmcodes, Redundanzfreiheit, Modularität und Nebenwirkungsfreiheit.

Haben Sie 6 Minuten Zeit?

Dann sehen Sie sich doch dieses Video an. Selbst mit VB-Script kann auf die Installer-API zugegriffen werden und falls es Sie interessiert sehen Sie auf der linken Menü-Leiste die Quelltexte der einzelnen VBS-Klassen.

Sie fragen sich bestimmt, warum gerade Visual Basic Script? Kurz beantwortet: weil es im Augenblick kein PowerShell-Cmdlets gibt, dass die in meinem Video gezeigten Fähigkeiten darstellen kann. Kurioserweise gibt es im Augenblick nur ein "lesendes" Powershell-Modul, damit können Sie Windows Installer-Produkte und -Patches abfragen, die auf Ihrem System installiert sind (und selbst das ist Glücksache KB-Artikel 974524).

SimplyCleverMSI

an overview about SimplyCleverMSI Die gezeigte Version ist bereits mehrere Jahre alt und es gibt auch eine verbesserte Version. Dieses VBScript nenne ich SimplyCleverMSI und ist ein von mir selbst initiiertes Projekt, das mich in meinen Kundenbezogenen Projekten unterstützt.

Die Abbildung der MSI-Tabellen und deren Funktionalität (relationale Datenbank und SQL) in Form einer Programmiersprache oder eines Interpreters ist in Wahrheit nicht so komplex wie vermutet. So selbstverständlich es auch klingt; es liegt grundlegend am Verständnis der Technologie, damit Automatismen erzeugt werden können. Mit Kreativität lassen sich fazinierende Lösungen ermöglichen.


How to build an Transform within an MSI (embedded Transforms)

Referenz » Embedded Transforms | Microsoft Docs

strSQL = "SELECT " & Chr(96) & "Name" & Chr(96) & "," & _
     Chr(96) & "Data" & Chr(96) & " FROM _Storages"
Set objView = objDatabase.OpenView(strSQL)

 'Create and Insert the row.
 Set objRecord = objInstaller.CreateRecord(2)
 objRecord.StringData(1) = NameOfStorage
 objView.Execute objRecord

 'Insert storage - copy data into stream
 objRecord.SetStream 2, PathAndNameOfMST
 objView.Modify msiViewModifyAssign, objRecord

objDatabase.Commit()
objView.Close
Set objView = Nothing

Eingebettete Transformationen werden innerhalb der MSI-Datei des Pakets gespeichert. Dies garantiert den Benutzern, dass die Transformation immer verfügbar ist, wenn auch das Installationspaket verfügbar ist. In erster Linie werden embedded transforms in Umgebungen mit mehreren Mandanten (unterschiedliche Konfigurationen) und / oder aus sicherheitsrelativen Betrachtungen verwendet.

msiexec /i cryptovision.msi TRANSFORMS=:CFG_ENV_A
msiexec /i cryptovision.msi TRANSFORMS=:CFG_ENV_B
msiexec /i cryptovision.msi TRANSFORMS=:CFG_ENV_C

Eingebettete Transformationen können Property-Werte und auch Registry-Informationen beinhalten, aber keine Dateien. Müssen Dateien transportiert werden, ist ein Patch (.MSP) die bessere Wahl.