UPDATE, Juli 2018 : Eine extrem komprimierte Zusammenfassung der folgenden Informationen zum Stackoverflow ist verfügbar: Die Hauptvorteile von MSI ( sozusagen "executive summary"
).
Ich habe in der Entwicklung als Release Manager , Build Engineer , Setup Developer sowie als Application Packager und Deployment Engineer in großen Unternehmen gearbeitet.
Dies ist eine Übersicht über die besten (und schlechtesten) konzeptionellen und realen Funktionen von MSI. Die häufigsten Entwurfsprobleme in MSI-Dateien werden nachstehend als separate Antwort aufgeführt . Nicht vorgeben, vollständig zu sein - wirklich nur ein unordentlicher "Brain Dump" - als "das Zeug, das in Büchern nicht zu finden ist" gedacht (wahrscheinlich aus gutem Grund).
Ich möchte auch diesen MSDN-Artikel als gute Lektüre vorschlagen : Windows Installer: Vorteile und Implementierung für Systemadministratoren .
Standardisierung:
Mit einem Wort, bei MSI geht es um Standardisierung und um den Umgang mit " Bereitstellungsgerüchen " von älteren Installer-Technologien. Eine ganze Reihe von Designs für schlechte Installationsarchitekturen, die zu wiederholten Bereitstellungsproblemen führten.
Insgesamt bietet MSI ein umfassendes, standardisiertes Framework für den Installer, das auch die Deinstallations- und integrierten Funktionen und Optionen für den unbeaufsichtigten Betrieb mit standardisierter GUI umfasst , die remote ausgelöst werden können .
Alleine diese Funktionen stellen eine massive Verbesserung gegenüber früheren Installationstechnologien dar, bei denen Deinstallation und unbeabsichtigtes Ausführen zufällig behandelt wurden - möglicherweise die wichtigsten Funktionen für die Unternehmensbereitstellung zusammen mit einer zuverlässigen Remotepaketverwaltung über Active Directory oder dedizierte Remoteverwaltungstools wie Microsoft SCCM (ehemals SMS). IBM Tivoli , CA Unicenter und ähnliche.
Jemand hat eine frühere Version dieser Antwort dupliziert . Vielleicht eine schnellere Lektüre?
Ältere Installationsprogramme "Deployment Smells"
MSI rät von vornherein von Gerüchen bei der Bereitstellung älterer Produkte ab. Diese Themen werden in späteren Abschnitten behandelt. Als kurze Auflistung wurden jedoch die bekanntesten Probleme mit älteren Installationsprogrammen und älteren Bereitstellungstechnologien aufgeführt:
- 1) Sie haben manchmal freigegebene und versionierte Dateien mit geringer Sorge um die daraus resultierende DLL-Hölle heruntergestuft und überschrieben
- 2) Im Lieferumfang des Installationsprogramms war häufig keine ordnungsgemäße Deinstallationsroutine enthalten , oder es wurde nicht ordnungsgemäß und zuverlässig ausgeführt - insbesondere, wenn es im Hintergrund ausgeführt wird. Dies ist ein sehr großes Problem für das SOE-Management von Unternehmen
- 3) Die unbeaufsichtigte Installation wurde selten richtig unterstützt. Die Zuverlässigkeit war schlecht, und man musste häufig einen Durchlauf der Installation mit einer Dialogauswahl aufzeichnen, was bei unerwarteten Bedingungen wie Fehlerdialogen oder Warndialogen, die im ursprünglichen Durchlauf nicht aufgezeichnet wurden, nicht gut war
- 4) Das Installationsprogramm zeichnete nicht auf, was installiert wurde, und daher gab es keine automatische Möglichkeit, Dateien auf der Festplatte zu überprüfen, um zu überprüfen, ob es sich noch um die vom Installationsprogramm ursprünglich installierten Versionen handelte
- 5) Sie enthielten unvorhersehbare, unzuverlässige und nicht standardmäßige Befehlszeilenparameter für die ausführbare Installationsdatei
- 6) Aufgrund der nicht standardmäßigen Befehlszeile und des Fehlens von Standards war es schwierig, Installationsprogramme mit bestimmten Werten, die für die Unternehmensbereitstellung erforderlich sind, zuverlässig und vorhersehbar anzupassen
- 7) Normale Benutzer konnten diese Installationen nicht ausführen, und man musste oft mit temporären Administratorrechten herumspielen (verwenden Sie "Ausführen als", wenn dies ausreicht, oder melden Sie sich als Administrator an, installieren Sie und melden Sie sich dann ab - diese vollständige Anmeldung und Profilerstellung wurde manchmal für den Abschluss der Installation benötigt)
- 8) das setup.exe Installationsprogramm würde oft kein richtigen Fehlercode zurück oder Erfolgscode, und manchmal wäre es sofort beenden und schlägt den Ball von einem anderen Prozess, der die Installation macht es schwierig , zu bestimmen , ob die Installation abgeschlossen wurde beenden würde - vor allem über eine Batch Datei
- 9) Die meisten setup.exe-Dateien ermöglichten das Extrahieren von Dateien, jedoch nicht auf zuverlässige, vorhersehbare Weise. Im Allgemeinen musste viel Zeit darauf verwendet werden, die richtigen Schalter zu finden, um dies zu erreichen
- 10) Die Protokollierung war im Allgemeinen schlecht und bei einigen Tools eher zufällig. Das Debuggen mit Protokolldateien brachte selten Klarheit, half aber ein bisschen
- 11) Es gab keine Transparenz darüber, was das Installationsprogramm tat, und es gab kein oder ein unzuverlässiges Rollback , um Änderungen nach einer fehlgeschlagenen Installation rückgängig zu machen
- 12) Es gab keine branchenübliche Methode zum Bereitstellen gemeinsam genutzter Laufzeitkomponenten, unabhängig davon, ob es sich um Betriebssystemkomponenten, Komponenten von Drittanbietern oder Ihre eigenen handelte
Die Liste enthält eine Reihe weiterer kritischer und anerkannter Bereitstellungsfehler . In der Welt der Unternehmensbereitstellung traten diese Probleme offensichtlich am häufigsten auf und führten zu dem Geschäft des " erneuten Packens von Anwendungen ", bei dem ein älteres Installationsprogramm mit Datenträger- und Registrierungsscantechnologien erfasst wird , um eine standardkonforme MSI-Datei zu erstellen für einen zuverlässigen Einsatz.
Das erneute Packen von Anwendungen ist eine Spezialaufgabe und führt im Allgemeinen zu MSI-Dateien von ausgezeichneter Qualität, wenn dies von sachkundigen Personen durchgeführt wird. Aufgrund der komplexen Registrierungslogik, die interaktiv ausgeführt werden muss, damit bestimmte Anwendungen funktionieren, ist es jedoch nicht möglich, alle Anwendungen erneut zu packen.
Vorteile von MSI - Kurze Zusammenfassung
Im Klartext sind die wirklich wichtigen Vorteile von MSI (in keiner bestimmten Reihenfolge):
- 1) Die Deinstallation ist immer für jedes Paket verfügbar, es sei denn, es ist aktiv deaktiviert
- 2) Dies gilt auch für die Protokollierung , die zwar umfangreich und standardisiert ist, aber ausführlich ist (Tools wie WiLogUtl.exe können zum Analysieren der Protokolldateien verwendet werden).
- 3) Was eine MSI-Datei tut, ist größtenteils (halb-) transparent oder "überprüfbar". Die Ausnahme sind benutzerdefinierte Aktionen - (siehe Abschnitt Transparenz unten)
- 4) Setup-Anpassung erfolgt auf standardisierte Weise ( Transformationen )
- 5) Es ist nicht erforderlich, sich mit temporären Administratorrechten herumzuschlagen, da die Installation über Active Directory-Ankündigung, Gruppenrichtlinien oder Remoteverwaltung ausgeführt wird. Einige Qualifikationen hier. Siehe auch diesen Screenshot aus dem Gruppenrichtlinienobjekt-Editor.
- 6) Die automatische Installation / Deinstallation über Verwaltungstools oder die Verwendung von msiexec.exe funktioniert einwandfrei
- 7) Es gibt vollständige Rollback- Unterstützung für fehlgeschlagene Installationen. Wenn Sie die Box manuell installieren, müssen Sie einige Qualifikationen kennen.
- 8) Die MSI-Datei eignet sich sowohl zur Überprüfung als auch zur Validierung auf Konsistenz und logische Gültigkeit, da sie einem Datenbankschema entspricht ( siehe Validierungsbeispiel ).
- 9) Aktualisierungen sind standardisierte Typen, obwohl sie für unerfahrene Paketierer komplex und häufig fehleranfällig sind
- 10) das extrahieren von dateien aus der msi ist eine integrierte funktion (siehe verlinkten artikel für einen guten schnellen überblick)
- 11) Die Windows Installer-Befehlszeile, msiexec.exe , bietet eine sehr genaue Kontrolle darüber, wie die Installationssequenz ausgeführt werden soll, und alle Optionen funktionieren mit allen standardkonformen MSI-Dateien (Protokollebene festlegen, unbeaufsichtigt / interaktiv / halb unbeaufsichtigt ausführen) , Installationsparameter einstellen, Transformationen anwenden etc ...).
- 12) Merge-Module ist der MSI-Mechanismus zum Bereitstellen gemeinsam genutzter Dateien mit mehreren MSI-Paketen. Es handelt sich um ein Verbrauchsmaterialmodul oder ein Paket mit Installationslogik, das zur Kompilierungszeit mit jedem MSI-Paket zusammengeführt werden kann. Wix hat dieses Konzept durch die Verwendung von Wix-Include-Dateien erweitert und verbessert - ein Konzept, das meiner Meinung nach den Zusammenführungsmodulen überlegen ist - insbesondere für Ihre eigenen Dateien (dh keine Betriebssystemdateien).
- 13) Die Windows Installer-Engine selbst verfügt über einen Mechanismus, der verhindert , dass versionierte oder geänderte Dateien bei der Installation überschrieben werden . Dies wird durch eine recht komplexe Dateiersetzungslogik gesteuert . Obwohl effizient und gut, kann die Logik ein Problem für sich sein, da viele Entwickler das Problem haben, dass sie ihre geänderten Konfigurationsdateien beim Upgrade nicht überschreiben können. Die Lösung für diese Probleme sind im Allgemeinen geringfügige Änderungen im Anwendungsdesign, um häufige Anti-Patterns für die Bereitstellung zu vermeiden. Dies ist jedoch eine große eigene Diskussion.
In der realen Welt habe ich weniger erfolgreiche Aspekte festgestellt , darunter das Patchen (sehr komplex), MSI-GUI (einfache Funktionen, ziemlich komplex, mangelnde Flexibilität), Ausfallsicherheit (kann das Debuggen sich wiederholender Selbstreparaturprobleme erschweren ) und die Gesamtkomplexität Umgang mit der Technologie für Anfänger (hohe Komplexität der Grundoperationen zuweilen - zum Beispiel Upgrades, GUI und die vielen interagierenden Details verursachen unerwartete Ergebnisse usw.). Die Geschwindigkeit des Installationsprozesses hat sich aufgrund des erhöhten Overheads von MSI ebenfalls erheblich verlangsamt. Beachten Sie einige Tipps zur Verbesserung der MSI-Installationsgeschwindigkeit .
Der Rest des Textes befasst sich ausführlicher mit einigen dieser Aspekte von MSI.
Transparenz (offenes Installer-Format)
Eine MSI-Datei ist im Wesentlichen eine reduzierte SQL Server-Datenbank, die als COM-strukturierte Speicherdatei gespeichert ist - im Wesentlichen ein Dateisystem in einer Datei oder einer Sammlung von Datenströmen. Dieser Dateityp wird in Microsoft Office-Dokumenten verwendet und bietet ein Standardformat , das überprüft und überprüft werden kann - ein großes Problem für große Unternehmen.
Mit Ausnahme der kompilierten benutzerdefinierten Aktionen ist eine MSI-Datei ein weißes Kästchen . Wenn das Setup verrückte Änderungen wie die systemweiten Netzwerkeinstellungen vornimmt, können Sie diese mithilfe der entsprechenden Tools anzeigen . Die bemerkenswerte Ausnahme sind kompilierte benutzerdefinierte Aktionen - die Blackbox sind . Für Windows-Logo-Anforderungen müssen benutzerdefinierte Aktionen mit Anmerkungen versehen werden, um zu erläutern, was sie tun. Dies wird jedoch von Setup-Entwicklern häufig ignoriert. Hoffentlich verbessert das Aufkommen von Wix dies.
Um festzustellen, was solche kompilierten benutzerdefinierten Aktionen im technischen Sinne tatsächlich tun, ist eine Setup-Erfassung erforderlich. Dies wird meiner Erfahrung nach kaum jemals gemacht. Es ist üblicher, sich an den Hersteller zu wenden, um Informationen zu erhalten, wenn die Software für die Unternehmensbereitstellung genehmigt werden muss. In diesem Fall ist es möglicherweise die Anwendung selbst, die die Verwendung verhindert, und nicht nur das Setup.
Anpassbarkeit (Transformationen)
Ein MSI kann über Transformationen an die Anforderungen und Standards eines Unternehmens angepasst werden, wobei die Interoperabilität mit den Installationsupdates des Herstellers erhalten bleibt. Sie ändern das Installationsprogramm nicht selbst, sondern erstellen Ihre Anpassung in einer separaten, organisationsspezifischen Datei, der Transformation (.mst-Datei) (ein Datenbankfragment oder eine Änderungstransaktion, wenn Sie möchten ). Es steht Ihnen frei, benutzerdefinierte Aktionen zu deaktivieren und im Allgemeinen alles im Installationsprogramm zu ändern, zu überschreiben oder zu deaktivieren. Sie können sogar neue Dinge, einschließlich Dateien, hinzufügen. Die Transformationsdateien werden manchmal auch verwendet, um eine MSI-Datei in verschiedene Sprachen zu lokalisieren. Auf eine MSI können mehrere Transformationen angewendet werden. Hier ein Beispiel mit abgeschnittenen Pfaden :
msiexec.exe /I "My.msi" /QN /L*V "C:\My.log" TRANSFORMS="C:\1031.mst;C:\My.mst"
Schnelle Parametererklärung:
/QN = run completely silently
/L*V "C:\My.log"= verbose logging
TRANSFORMS="C:\1031.mst;C:\My.mst" = Apply transforms 1031.mst and My.mst.
Management und Berichterstattung
Windows Installer verwaltet eine umfassende Datenbank aller Elemente, die ein Produkt in der Registrierung installiert hat ( HKEY_CLASSES_ROOT \ Installer - ändern Sie hier niemals etwas direkt! Dies gilt auch für Experten).
Sie können zuverlässig feststellen, ob ein Produkt installiert ist, welche Funktionen installiert wurden und welche Dateiversionen installiert wurden. Darüber hinaus erhalten Sie eine Liste aller Patches, die auf das Basisprodukt angewendet wurden, sofern vorhanden. Sie können über APIs, die Win32, COM oder .NET unterstützen, auf diese Datenbank zugreifen, indem Sie verschiedene Skript-, Konfigurations- und Verwaltungstools wie Microsoft SCCM , IBM Tivoli , CA Unicenter usw. verwenden.
Sicherheit (vorübergehend erhöhte Rechte)
MSI umfasst auch Prinzipien für "erhöhte Rechte", die es einem eingeschränkten Benutzer ermöglichen, die Installation eines Produkts auszulösen, für dessen Installation Administratorrechte erforderlich sind. Dies ist Teil der " Ankündigungsfunktion ", mit der ein Administrator den Benutzern Installationsprogramme zur Verfügung stellen kann, ohne sie tatsächlich auf allen Arbeitsstationen zu installieren. Das Installationsprogramm selbst muss auf mehreren Hauptkonten ordnungsgemäß erstellt worden sein, damit dieses Konzept mit erhöhten Rechten ordnungsgemäß funktioniert. Die Benutzer können die Installation des Produkts selbst auslösen oder die Installation wird von einem dedizierten Bereitstellungssystem wie SCCM, Tivoli, Unicenter (normalerweise größere Unternehmen) gesteuert. Es ist nicht erforderlich, sich mit temporären Administratorrechten herumzuschlagen , um die Arbeit zu starten Dies ist häufig bei älteren Installateuren der Fall.
Die umfassende Installationsdatenbank stellt außerdem sicher, dass Sie einen vollständigen Überblick über die installierten Patches haben und somit Sicherheitslücken über Automatisierungs- und Verwaltungstools erkennen können.
Validierung
MSI-Dateien können mit Validierungsregeln überprüft werden, um sicherzustellen, dass sie einer Reihe interner Konsistenzregeln ( ICE) entsprechen). Unternehmen können ihre eigenen ICE-Prüfungen erstellen, um spezielle Unternehmensregeln und -anforderungen durchzusetzen. Dies hilft sehr bei der Qualitätssicherung. Der Grund für die mögliche Validierung liegt in der Selbstreferenzierung relationaler Datenbanken und dem zugehörigen Datenbankschema. Die Datenbank muss intern konsistent sein und in Bezug auf Fremdschlüssel, Datentypen, Feldbreite, Schemaversion usw. ihrem eigenen Schema entsprechen. Die Validierung geht auch darüber hinaus und kann echte logische Fehler und Fehler im Paket erkennen , nicht nur Formatierungs- und Tippfehler. Beispielsweise kann es Dateien oder Dateitypen erkennen, die an fehlerhaften Zielorten bereitgestellt werden.
Ausfallsicherheit (Selbstreparatur)
Die Administrator-Installationsfunktion von Windows Installer bietet eine Standardmethode zum Extrahieren der Quelldateien von einer MSI ( hier finden Sie einige zusätzliche Informationen zu diesem Thema ). Diese Quelldateien können dann auf einer Freigabe abgelegt werden und stehen allen Arbeitsstationen zur Installation zur Verfügung. Auf diese Weise wird sichergestellt, dass Reparatur-, Deinstallations- und Änderungsvorgänge abgeschlossen sind, ohne dass Sie das Installationsmedium auf CD oder Ähnlichem anfordern müssen. Dies ist besonders wichtig für Patch- und Aktualisierungsvorgänge, bei denen unter bestimmten Umständen auf die Quelldateien der alten Versionen zugegriffen werden muss.
Es gibt auch häufige Probleme mit dieser Ausfallsicherheitsfunktion. Die meisten Administratoren haben Maschinen mit zyklischen Selbstreparaturzyklen erlebt , die nie anzuhalten scheinen. Folgen Sie dem Link, um eine lange Liste der Ursachen für dieses Problem zu erhalten. Und noch einmal, hier ist eine kürzere Version , die möglicherweise leichter zu lesen ist.
Rollback
Die Installation einer MSI-Datei löst normalerweise die Erstellung eines Wiederherstellungspunkts aus . Darüber hinaus werden alle Dateien und Registrierungselemente, die während der Installation ersetzt oder überschrieben wurden, gespeichert und wiederhergestellt, wenn die Installation nicht abgeschlossen werden kann. Änderungen an benutzerdefinierten Aktionen bleiben vorbehalten.
Benutzerdefinierte Aktionen müssen eine eigene Rollback-Unterstützung für die Einhaltung des Windows-Logos implementieren. Dies wird häufig ignoriert, erfordert jedoch das Erstellen einer zweiten benutzerdefinierten Aktion, um die von der benutzerdefinierten Hauptaktion vorgenommenen Änderungen rückgängig zu machen.
Das Rollback stellt sicher, dass die Workstation in einem stabilen Zustand bleibt, selbst wenn die Installation fehlschlägt. Das eigentliche Rollback-Skript wird in einem versteckten Ordner direkt auf dem Systemlaufwerk gespeichert - in der Regel C: \ Config.MSI . Es enthält Dateien mit den Erweiterungen .RBS und .RBF - Rollback- Skriptdateien . Wie Sie vielleicht erwarten können, verletzen schlecht gestaltete MSI-Dateien hier die integrierten Funktionen von Windows. Weitere Informationen finden Sie in meinem anderen Beitrag in diesem Thread.
Es gibt Möglichkeiten, das Rollback zu deaktivieren und die Installation zu beschleunigen. Nicht generell empfohlen, aber hier finden Sie Details zur MSIFASTINSTALL-Eigenschaft und zu DISABLEROLLBACK . Dies ist eine komplizierte Funktion, aber hier ist eine kurze Übersicht über das Rollback .
Patches und Updates
Obwohl das Patchen in Windows Installer sehr komplex ist, wird es vollständig verwaltet und auf dem System registriert, sodass ein Systemsicherheitsstatus durch Überprüfen der installierten Komponenten ermittelt werden kann. Aktualisierungen sind auf einige grundlegende Varianten standardisiert. Dadurch können Aktualisierungen mit einem höheren Maß an Sicherheit durchgeführt werden, sofern Sie mit der damit verbundenen Komplexität fertig werden. Bereitstellungssysteme können melden, welche Aktualisierungen fehlgeschlagen sind und warum.
Aus subjektiver Sicht eignet sich das Patchen für zwei grundlegende Zwecke : 1 ) kleine Hotfixes für gelieferte Produkte und 2 ) das Patchen eines installierten Produkts, um die fehlerhafte Deinstallationssequenz zu beheben, die eine saubere Deinstallation der Produkte verhindert.
Ein Patch ist nur ein Übermittlungsmechanismus für ein Update, das bereits funktioniert . Als solches ist es nur ein Container, der komplizierter und fehleranfälliger ist als das ursprüngliche Setup. Die wichtigste Regel für einen Patch ist, dass er kleiner sein muss als die ursprüngliche MSI, oder es gibt keinen offensichtlichen Grund, überhaupt einen Patch bereitzustellen. Ein Patch kann schnell riesig werden, wenn er auf mehrere Produktversionen abzielt.
Protokollierung (in der Tat ausführlich)
Windows Installer bietet eine standardisierte Protokollierungsfunktion, die früheren Inkarnationen weit überlegen ist, wenn auch fast übermäßig ausführlich. Protokolldateien können mithilfe von Protokollanalysegeräten entschlüsselt werden , und benutzerdefinierte Protokollstufen können verwendet werden, um zu verhindern, dass zu große Protokolldateien mit unnötigen Informationen erstellt werden. Für Debugging-Zwecke ist die ausführliche Protokollierung äußerst nützlich. Siehe Rob Mensching Blog für eine gute manuelle Art und Weise einer MSI - Protokolldatei zu lesen ( im Wesentlichen suchen Sie nach „ Wert 3 “ in der Protokolldatei). Hier ist eine Beispielbefehlszeile, die eine ausführliche Protokollierung durchführt:
msiexec.exe /I "C:\Installer.msi" /QN /L*V "C:\msilog.log"
Dieser Artikel von Robert Macdonald vom Windows Installer-Team wird dringend empfohlen, um einen praktischen Einblick in die MSI-Protokollierung zu erhalten: Interpretieren von Windows Installer-Protokollen .
Fazit
Nicht alles ist gut über Windows Installer . Die Komplexität kann manchmal verwirrend sein, aber für große Unternehmen sind MSI-Dateien jeder anderen Form der Bereitstellung weit überlegen, wenn Sie die oben aufgeführten Vorteile berücksichtigen.
Neues Installer-Paradigma (die riesige SQL-Anweisung)
Um das neue " Paradigma " zu verstehen, ist es wichtig zu verstehen, dass MSI eher eine deklarative Beschreibung dessen ist, was auf dem Zielsystem passieren wird, als eine feste Abfolge von Ereignissen. Ich nehme an, Sie können sich das als eine riesige SQL-Anweisung vorstellen . Beispielsweise deklarieren Sie Elemente, die einer INI-Datei hinzugefügt oder geändert werden sollen. Während der Installation werden Änderungen nachverfolgt und ein Rollback ist verfügbar, sodass Änderungen zurückgesetzt werden können, wenn die Installation fehlschlägt. Dies funktioniert wirklich wie " automagisch " und ist zuverlässig, wenn es richtig gemacht wird.
Benutzerdefinierte Aktionen (die üblichen Verdächtigen)
Es ist ein großen Kopfschmerzen für erfahrene MSI Entwickler Menschen auf komplexe, unzuverlässig benutzerdefinierte Aktionen für Funktionalität verlassen , um zu sehen , die besser mit eingebauten in MSI - Funktionen implementiert. Ein erheblicher Teil aller MSI-Fehler und Rollback-Probleme wird durch fehlerhafte benutzerdefinierte Aktionen verursacht, und die meisten anderen Fehler werden durch fehlerhafte Verwendung des MSI-Designs verursacht (eine Liste der häufigsten MSI-Fehler finden Sie in der separaten Antwort).
Zusätzlich zu den integrierten MSI-Funktionen stehen über ein neues Framework wie Wix - die XML-Methode zum Kompilieren von MSI-Dateien - immer mehr benutzerdefinierte Funktionen zur Verfügung , sodass für die meisten Vorgänge immer weniger komplexe benutzerdefinierte Aktionslogiken erforderlich sind.
MSI bietet vollständige Unterstützung für das Zusammenführen von INI-Dateieinstellungen, Schriftarten, Umgebungsvariablen, Registrierungsschlüsseln, COM-Informationen, Verknüpfungen, Dateierweiterungen, Startbedingungen, GAC-Installation, ODBC usw.
WIX bietet Unterstützung für erweiterte Funktionen wie SQL Server-Erweiterungen, IIS-Installationen und -Konfiguration, Leistungsindikatoren, DirectX-Prüfung und andere spielbezogene Aufgaben, native .NET-Image-Generierung, COM +, Treiber, Firewall-Regeln, PowerShell-Erweiterungen, Schließen von Anwendungen, Verwaltung von Benutzern, Gruppen, Freigaben und vielem mehr. Etwas umständlich, aber viel zuverlässiger als Ihre eigenen benutzerdefinierten Aktionen.
Vermeiden Sie benutzerdefinierte Aktionen um jeden Preis, wenn möglich
Um es in die richtige Perspektive zu rücken: Diese integrierten und vorgefertigten Lösungen werden von den besten verfügbaren Bereitstellungsexperten erstellt und von Tausenden, Zehntausenden oder vielleicht sogar Millionen von Benutzern (für integrierte Funktionen in MSI) getestet selbst). Glauben Sie wirklich, dass Sie Ihre eigenen benutzerdefinierten Aktionen verbessern können? Die Verwendung einer benutzerdefinierten Aktion sollte ein seltenes Ereignis sein und es sollte unbedingt erforderlich sein, für das von Ihnen installierte Produkt etwas Einzigartiges zu erreichen . Und Sie müssen auch die richtige Rollback-Unterstützung schreiben, was ziemlich kompliziert ist.
Das Schreiben einer benutzerdefinierten Aktion ist fast immer ein Fehler , aber es gibt echte Fälle, in denen Sie die Flexibilität auch wirklich benötigen. Wie immer ist es wichtig, dass Sie Ihre Schlachten gut auswählen. Es mag zunächst eine lustige Aufgabe sein, aber Sie werden wahrscheinlich mit vielen unerwarteten Problemen konfrontiert sein und viel kostspielige Zeit verschwenden. Ich meine das sehr ernst. Ich habe eine Reihe von benutzerdefinierten C ++ - Aktionen für den Unternehmensgebrauch selbst geschrieben (um fehleranfällige benutzerdefinierte VBScript-Aktionen zu beseitigen) - es ist kein Kinderspiel, und obwohl die Codierung möglicherweise nicht die schwierigste der Welt ist, ist das Debuggen und Testen und Der Anschluss an eine tatsächliche MSI-Datei ist äußerst aufwändig. Wenn Sie einige Zeit nachprüfen, welche vorgefertigten Optionen verfügbar sind, sparen Sie wahrscheinlich Wochen an Entwicklungsarbeit und erzielen eine wesentlich höhere Zuverlässigkeit der Bereitstellung.
Verwenden Sie die Anwendungsstartsequenz
Ein sehr wichtiger Punkt ist, dass viele Anwendungskonfigurationen beim Start der Anwendung stattfinden sollten, wenn ein vorhersehbarer Laufzeitkontext und eine gute Fehlerbehandlung zur Verfügung stehen, und nicht in dem Setup, das nur einmal ausgeführt wird und über sehr komplizierte Identitätswechsel , Sequenzierung , Konditionierung und Laufzeit verfügt Komplexität .
Ihr Setup sollte die Anwendung nicht konfigurieren, es sollte die Anwendung für die Konfiguration beim ersten Start vorbereiten . Insbesondere sollte Ihr Setup alle Einstellungen schreiben, für die erhöhte Rechte erforderlich sind - Schreiben in HKLM, Registrieren von Diensten, Installieren auf Computerpfaden und alle Dinge, die eine Anwendung mit normalen Benutzerrechten nicht alleine schreiben kann.
Wenn Sie ein Setup-Entwickler sind, sollten Sie anbieten, sich an der Programmierung der Anwendungsstartsequenz zu beteiligen, anstatt benutzerdefinierte Setup-Aktionen zu schreiben . Wenn nichts anderes, um nicht so auszusehen, als würden Sie versuchen, das Geld an jemand anderen weiterzugeben. In dieser Startsequenz können Sie viel zuverlässigeren und überprüfbareren Code schreiben, der es einfacher macht, Hilfe vom QA-Personal zum Testen zu erhalten (sie verstehen häufig nicht das Testen von Bereitstellungen sowie das Testen von Anwendungen).
Einrichtungskomplexität
Der Kern der Komplexität des Setups liegt in der Tatsache, dass Fehler kumulativ sind (Sie verwalten einen Übermittlungsprozess, nicht nur eine schnelle Neukompilierung), Fehler nur sehr schwer zu debuggen sind (kein Zugriff auf die Systeme, auf denen die Fehler auftreten) und auf das Zielsystem Zustände unterscheiden sich in fast jeder erdenklichen Weise . In dieser Antwort erfahren Sie mehr über diese Komplexität und wie sich Zielsysteme auf schockierende Weise verhalten können: Windows Installer und die Erstellung von WiX sowie die Komplexität der Bereitstellung (siehe unten).
WiX (beste MSI-Lösung für einige Zwecke)
In dieser WiX-Kurzanleitung finden Sie eine Beschreibung der neuen XML-basierten Methode zum Kompilieren von MSI-Dateien. Die textbasierten Quelldateien bieten eine viel bessere Quellcodeverwaltung als zuvor. Dies ist ein kostenloses Open-Source-Toolkit, das dringend empfohlen wird .
NB : An anderer Stelle im Thread finden Sie eine kurze Übersicht über die häufigsten Entwurfsprobleme bei MSI-Dateien. Diese sind sehr unvollständig, sollten aber unbedingt gelesen werden. Ich wollte das nicht zu dieser Antwort hinzufügen, da es nicht zu 100% verwandt ist, aber für den realen Gebrauch ist es ein entscheidendes Thema.
Einige grundlegende MSI-Informationen für Systemadministratoren:
(Entschuldigen Sie die schamlose "Beförderung" - es ist für den einfachen Zugang und Abruf)
Hier nur einige Links zu Themen, die für Systemadministratoren hilfreich sein können, um die Bereitstellung in ihren Netzwerken zu steuern:
Spezielle Themen zur Vorgehensweise:
Konzeptionelle Themen / Best Practice: