Windows: Was ist besser? EXE- oder MSI-Installer
Wer unter Windows Programme installiert, bekommt in der Regel EXE- oder MSI-Dateien angeboten. Doch was ist der Unterschied? Und was ist besser?
Wer Programme in Windows installieren möchte, hat häufig die Wahl zwischen zwei Dateiformaten. Der klassischen EXE-Datei und einer MSI-Datei. Die EXE kennt jeder - sie ist eine Ausführungsdatei (von Executable), hinter der sich dann beliebiger Code ausführen lässt. Die MSI-Datei kennen wohl schon weniger Leute - es ist ein proprietäres Installationsformat für die Windows-Welt (jetzt Windows Installer, früher Microsoft Installer).
Die Grundlagen der MSI-Datei
Doch was ist jetzt besser? Zum Beispiel, wenn man Firefox installiert, wo es sogar beide Formate zur Auswahl gibt. EXE-Datei oder MSI-Datei? Kurz gesagt ist die MSI-Datei in der Regel die bessere Wahl, denn sie ist ein standardisierter Container für Installationen von Programmen unter Windows, die eine API nutzen. Das hat dann auch den Vorteil in Deployment-Umgebungen, dass die Parameter alle gleich sind. Und auf der anderen Seite ist es für Entwickler natürlich einfacher, wenn sie keine eigene Installationsroutine schreiben müssen.
Die Grundlagen der EXE-Datei
Hinter der EXE-Datei steckt in der Regel eine eigene oder zugekaufte Installationsroutine, die das Programm installiert. Das Ergebnis ist das gleiche, doch anders als beim Container ist hier nichts standardisiert. Wer zum Beispiel auf Parameter angewiesen ist, muss diese einzeln aus der Dokumentation fischen. Die EXE-Datei kann dadurch natürlich auch mehr - potenziell auch nötige Aufgaben bereits zur Installation erledigen, die die MSI-Datei nicht leisten kann.
Nennenswerte Unterschiede
Ein kleiner Bonus der MSI-Datei ist, dass sie keinen eigenen Code ausführt. Somit kann auch keine Schadsoftware ausgeführt werden. Logischerweise lässt sich mit der MSI-Datei Schadcode installieren, aber man hat das Problem zumindest nicht schon direkt nach dem Herunterladen der EXE-Datei, die sofort Schadcode ausführen kann. Die MSI-Datei lädt auch keinen Schadcode aus dem Internet nach und ist ein Offline-Installer. Der Bonus ist nicht riesig, aber er ist vorhanden.
Ein Unterschied ist auch, dass via MSI eine standardisierte Deinstallation angelegt wird - eher ein Rollback, der alles entfernt, was initial installiert wurde und einen Systemwiederherstellungspunkt anlegt. Das ist bei einer EXE-Datei nicht pauschal der Fall. Die Deinstallationsroutine muss vom Entwickler dazugelegt werden und so gestaltet sein, dass sie keine Reste hinterlässt. Das klappt nicht immer gut - gilt aber auch für die MSI-Routine, die keine neu angelegten Dateien vom Programm entfernt, sondern nur das aus dem Container.
Zu lang, nicht gelesen
Am Ende ist es wohl ratsam, die MSI-Datei zu verwenden, wenn sie angeboten wird. Das Ergebnis ist oft gleich, wenn man noch einmal das eingangs erwähnte Beispiel des Firefox-Browsers nimmt, aber es ist unter Windows die saubere Lösung und speziell im Enterprise-Bereich pflegeleichter. Manche Anbieter verstecken die MSI-Datei etwas, wie etwa Google für Chrome, wo die MSI-Datei im Enterprise-Bereich versteckt ist; dafür aber ein Offline-Installer, während die "Consumer-Version" Daten aus dem Web nachlädt.

Auf so was kann nur MS kommen.
Und es gibt ja nicht nur ein Savegame Ordner. Es gibt mindestens drei verschiedene Konventionen. Leider kenne ich die Historie nicht, wie das entstanden ist.
Wie so vieles wachsen bestimmte Dinge und es hält sich sowieso keiner an Standards. Was das größte Problem ist, wenn man hinterher als Hersteller mal was korrigieren will....
Jeder kann natürlich auf seinem System machen was er will und das ist ja auch das schöne an einem offenen System. Meinetwegen installiert man alles in ein Verzeichnis, das globale Schreibrechte hat.
Nur: Wenn man kritisiert warum bestimmte Dinge sind so wie sie sind, sollte man schon auch immer mit berücksichtigen, was die Motivation hinter den Richtlinien ist - nur dann kann eine Kritik auch wirklich Sinn machen. So sehe ich das jedenfalls.
In /Roaming gehört gar nichts, außer Daten, die der User auf jedem Rechner immer verfügbar haben muss (es ist eben für das Roaming Profile gedacht, dass nach dem Logout mit dem Server synchronisiert wird). ProgramData ist das Temp Verzeichnis für nicht-flüchtige Daten, die aber nicht zu einem konkreten User gehören. Das ins Temp zu bringen wäre oft fatal. Es sind einfach zwei verschiedene Dinge.
Im Unix Speak wäre /var/tmp das Temp-Verzeichnis und alles andere unter /var entspricht dem ProgramData unter Windows.
Dass Dateiverknüpfungen von der Applikation gemacht werden, ist eine Unsitte einiger weniger Programme (7zip). Browser machen das vermutlich, weil sie damit den Anwender permanent nerven können. Von "meist" würde ich da nicht sprechen. Zumal man im Allg. Admin-Rechte braucht, um die Verknüpfungen zu ändern (es sei denn, man hat einen Service im Hintergrund, den man dafür missbrauchen kann).
Im Programm-Verzeichnis selbst sollten generell keine dynamischen Daten stehen. Das Programmverzeichnis ist für den User normal zum Schreiben gesperrt und das ist in einem Multi-User System auch sehr gut so. Ich hoffe, ich muss Dir nicht erklären, warum.