Warum kann Windows Installer jeweils nur ein Programm installieren?

10

Ich habe mich immer gefragt, warum Sie mit Windows Installer jeweils nur ein Programm installieren können. Es ist sehr frustrierend, nicht mehrere Installationen starten zu können, insbesondere beim Einrichten einer neuen Windows-Installation. Was ist der Grund dafür?

Rytis
quelle

Antworten:

6

Es wäre sehr komplex, die Korrektheit zu gewährleisten, wenn gleichzeitig Installationen stattfinden - vorausgesetzt, sie teilen einige der Dateien. Dies würde irgendeine Form von Transaktionen erfordern.

  • Sie müssen Dateien sperren
  • Es sollte möglich sein, Zwischenänderungen rückgängig zu machen, wenn die Installation fehlschlägt (nicht sicher, ob dies jetzt möglich ist?).

Diese Konzepte sind aus Transaktionsdatenbanken bekannt - aber das Thema ist nicht trivial, und in Dateisystemen finden Sie normalerweise keine vollständige Transaktionsinfrastruktur (obwohl Journaling-Dateisysteme einen Teil davon bereitstellen). Ein Problem ist, dass mehrere Sperren zu einem Deadlock führen können. Dann benötigen Sie eine Deadlock-Erkennung (oder beide Installationsprogramme hängen für immer) und eine Möglichkeit, dies zu behandeln. Deadlocks können vermieden werden (z. B. indem Dateien immer in derselben Reihenfolge gesperrt werden), es gibt jedoch andere Probleme:

Wenn Sie alle erforderlichen Dateien im Voraus sperren, erhalten Sie effektiv das, was Sie haben: Ein Installationsprogramm muss warten, bis das andere fertig ist. Wenn Sie nicht alle erforderlichen Dateien im Voraus sperren und weitermachen, besteht das Risiko, dass die "Transaktion" fehlschlägt. Das würde bedeuten, dass einer der Installer neu gestartet werden müsste.

Dann müssen Sie möglicherweise über Transaktionsisolationsstufen nachdenken - um vollständig korrekt zu sein, müssten Ihre Transaktionen "serialisierbar" sein -, aber das ist selbst für viele Datenbanken nicht einfach.

Es mag sogar alternative Strategien geben, um mit den Problemen umzugehen, die eine vollständige Isolation umgehen, aber es wäre normalerweise noch schwieriger, ihre Richtigkeit zu beweisen.

Ich glaube, dass wir bei gleichzeitiger Installation viel schwer zu lösende Probleme nach der Installation haben würden - insbesondere, weil ich nicht glaube, dass ein Betriebssystemanbieter (oder eine Distribution) alle Probleme haben würde, um es 100% sauber zu machen. Daher würde ich es vorziehen, es nicht zu verwenden, selbst wenn es vom Betriebssystem angeboten würde.

Hinweis

Aber vielleicht wollen Sie wirklich nicht einmal "zur gleichen Zeit" installieren. Vielleicht wäre es ausreichend, wenn Sie die Installationen in die Warteschlange stellen könnten, die dann nacheinander ausgeführt werden (idealerweise ohne dazwischen Fragen zu stellen). Und das ist wirklich etwas, einige andere Betriebssysteme (Distributionen) funktionieren viel besser.

Chris Lercher
quelle
1
Diese Antwort ist zwar richtig, scheint mir aber zu ausführlich. Jemand, der fragt, warum der Installationsdienst so funktioniert, wie er funktioniert, wird diese Antwort wahrscheinlich nicht verstehen.
GWaldo
2
@gWaldo: Okay, vielleicht hast du recht ... Andererseits möchte ich nicht nur sagen "Es ist komplex, glaub mir (Punkt). Du würdest es sowieso nicht verstehen". Vielleicht ist das OP (oder jemand anderes, der über diese Frage stolpert) wirklich interessiert, und eine Antwort, die dem Problem auf den Grund geht, hilft ihm zu schätzen, ob es wirklich viel Komplexität gibt, um etwas zu lösen, das so einfach aussieht Oberfläche. Wer weiß?
Chris Lercher
Sehr richtig. Das ist ein guter Punkt.
GWaldo
Während das Gerede über Isolation plausibel klingt, können Sie mehrere Installationsprogramme ausführen, wenn sie das Windows Installer-Framework nicht verwenden. Ich hatte noch nie eine Unterbrechung, wenn ich nebeneinander lief ... Vielleicht habe ich nur Glück :) Was das Einreihen von Installationen betrifft, gibt es Tools dafür, aber bei Multicore-CPUs (zum Teufel können Desktop-CPUs jetzt 8 Threads ausführen ...) scheint es die Antwort zu sein, sie nebeneinander laufen zu lassen (obwohl sie möglicherweise immer noch um E / A kämpfen).
Rytis
2
@Rytis: Ich wünschte, ich hätte das gleiche Glück :-) - Ich hatte Installateure, die nach dem Zufallsprinzip ausgeglichen waren, ohne sie gleichzeitig auszuführen. Informationen zu Multicores: Es gibt eine andere Möglichkeit, sie zu verwenden: Durch die Verwendung mehrerer Kerne innerhalb eines Installationsprozesses. Das ist immer noch nicht immer möglich oder einfach, kann aber viel besser koordiniert werden. Insgesamt denke ich, dass die größte Zeitersparnis immer noch besteht, wenn der gesamte Installationsprozess (Warteschlange) nur am Anfang und am Ende Fragen stellt. Dann können Sie sich einen Kaffee holen oder etwas anderes tun, während die Installation ausgeführt wird (und die verbleibenden Kerne für alles verwenden, was Sie tun möchten).
Chris Lercher
6

Dies ist beabsichtigt, um zu vermeiden, dass zwei Installationen dieselben Dateien / Ordner / Registrierungsschlüssel / etc manipulieren. Es hätte wahrscheinlich auf verschiedene Arten geschehen können, aber Microsoft hat diese Wahl getroffen.

Massimo
quelle
Gibt es einen Hinweis, der Ihren Anspruch stützt?
Aaron Digulla
1

Sie können mehrere MSI-Dateien loslegen, um sie mithilfe einer Batch-Datei schnell hintereinander zu installieren. Sie können nicht zwei MSI-Dateien gleichzeitig ausführen, da beide gleichzeitig auf die Festplatte schreiben.

Der Grund dafür ist, dass ein Teil einer MSI-Installation als "Transaktion" ausgeführt wird - eine Folge von Änderungen, die entweder festgeschrieben oder zurückgesetzt werden, je nachdem, ob die Aktionen in der Transaktionsliste fehlerfrei abgeschlossen werden. Alle müssen fehlerfrei abgeschlossen werden, und dann wird die Transaktion festgeschrieben. Andernfalls erfolgt ein vollständiger Rollback aller Änderungen. Daraus folgt, dass jeweils nur eine solche Transaktion aktiv sein kann.

Auf der technischen MSI-Ebene werden nur die Aktionen zwischen den Standardaktionen InstallInitialize und InstallFinalize in der InstallExecuteSequence als Transaktion ausgeführt. Außerhalb dieser Aktionen dürfen keine Systemänderungen vorgenommen werden, aber manchmal sind MSI-Dateien fälschlicherweise so konzipiert, dass Änderungen in anderen Sequenzen vorgenommen werden.

Stein Åsmul
quelle