Was teilt dem Windows Installer-Dienst mit, dass eine weitere Installation ausgeführt wird?

Fehler-screenshot

Die übliche Lösung für diesen Fehler besteht darin, den Computer neu zu starten, was das Problem normalerweise behebt. Andere Lösungen für besonders hartnäckige Fälle umfassen das Deaktivieren des Installationsdienstes und das anschließende Neustarten.

Geben Sie jedoch für die Zwecke dieser Frage vor, dass dieser Fehler auf einem Server oder einem anderen System auftritt, auf dem Ausfallzeiten nicht akzeptabel sind. Wir möchten dies ohne Neustart tun.

Offensichtlich gibt es einige Daten irgendwo gespeichert werden, dass das Installationsprogramm überprüft, bevor diese Fehlermeldung ausgegeben wird. Es ist ein Flag vorhanden, das dem Installationsdienst mitteilt, dass eine weitere Installation ausgeführt wird.

Was mich interessiert, ist wo diese Daten gespeichert werden.

Was genau benachrichtigt den Installationsdienst, dass eine andere Installation bereits ausgeführt wird?

Author: Karu, 2020-05-04

1 answers

Die Windows Installer-Laufzeit erhält während bestimmter Phasen einer (Un -) Installation einen globalen Mutex mit dem Namen _MSIExecute. Ein Mutex kann jeweils nur einem Thread gehören; Für einen globalen Mutex ist das ein Thread auf dem gesamten System. Alle nachfolgenden Versuche, das Eigentum an dem Mutex zu erlangen, schlagen fehl, bis der aktuelle Eigentümer es freigibt.

Ein mutex ist ein transientes Objekt im Windows-kernel. Es ist zu keinem Zeitpunkt eine Datei auf der Festplatte. Ein Mutex wird automatisch freigegeben, wenn der aktuelle der Besitz von Thread wird beendet, ohne ihn explizit freizugeben.

Dies ist derselbe Mechanismus, mit dem einige Programme verhindern, dass mehrere Instanzen des Programms ausgeführt werden.


Um die andere implizite Frage von zu beantworten, welcher - Prozess diesen Mutex enthält, können Sie Tools wie Microsoft / Sysinternals ' Process Explorer oder Handle verwenden, um Mutexe zu finden. Im Prozess-Explorer sollte es in der Handle-Suche angezeigt werden (Strg+F).

Sobald Sie die prozess, müssen Sie entscheiden, was damit zu tun. Die sicherste Option ist normalerweise zu warten, aber wenn es irgendwie in einem (un)Installationsschritt stecken geblieben ist, haben Sie möglicherweise keine andere Wahl, als es zu töten. Natürlich könnte das Töten Konsequenzen haben, z. B. ein halbes(nicht)installiertes Programm herumliegen zu lassen-MSI soll Rollbacks garantieren, aber diese sind schwierig, wenn der Prozess, der sie ausführt, beendet wird! Es ist auch schwierig zu beurteilen, ob es tatsächlich stecken bleibt, da einige Schritte können nehmen Sie eine sehr lange Zeit zu vervollständigen.


Siehe auch:

 22
Author: Bob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-05-04 16:56:13