Erzwingen, dass eine Anwendung eine einzelne Instanz ist

Erzwingen, dass eine Anwendung eine einzelne Instanz ist

Gibt es eine Möglichkeit, eine Anwendung unter Windows zu einer Einzelinstanzanwendung zu machen, d. h. nicht zu starten, wenn bereits eine andere Instanz derselben Anwendung ausgeführt wird?

Im Idealfall möchte ich dies tun können, ohne die eigentliche Anwendung durch einen Stub ersetzen zu müssen, aber ich hätte nichts dagegen, einen zu verwenden, wenn es wirklich nötig ist.

Antwort1

Normalerweise muss man diese "Singleton"-Funktion direkt in die Anwendung implementieren. Wenn man sie "von außen" schützen will, muss man einen Wrapper verwenden, der prüft, ob bereits eine andere Instanz läuft. Es gibt vielleicht noch weitere Lösungen dafür, aber ich habe den Trick einmal mitnsisDie Idee ist folgende:

  • Erstellen Sie einen „Fake-Installer“, der selbst nur ein kleiner Wrapper um die Anwendung ist, die Sie starten möchten
  • Machen Sie diesen Installer zu einem Singleton. Siehe hierNur eine Installerinstanz zulassenoderÜberprüfen Sie, ob Ihre Anwendung ausgeführt wird
  • Starten Sie Ihre Anwendung von diesem "Wrapper-Installer". Siehe hierExecCmd-Plug-In
  • „Verstecken“ Sie das normale Anwendungssymbol vor dem Benutzer und präsentieren Sie das gefälschte Installationsprogramm. Da Sie ihm ein ansprechendes Symbol hinzufügen können, sollten Sie es wie das Originalprogramm aussehen lassen können.

Antwort2

Sofern es keinen Workaround gibt, können Sie sich mit demAnwendungskompatibilitätskit, die dies ermöglicht – was ich bezweifle (es ist nicht die Art von Sache, die selbst die Kompatibilität bricht 1 ) – dann gibt es keine Einstellung in Windows.

Anders als eine Launcher-Anwendung könnte der andere Ansatz darin bestehen, nach neuen Prozessen zu suchen (z. B. WMI-Instanzerstellungsereignisse für Win32_ProcessObjekte – natürlich nach Sitzung gefiltert) und eine Aktion auszuführen, um die zweite Instanz zu blockieren.


1 Natürlich kann ein Fix erforderlich sein, wenn eine Anwendung einen nicht unterstützten Mechanismus zur Erkennung mehrerer Instanzen ihrer selbst verwendet und der Erkennungsmechanismus daher einen Shim benötigt.

verwandte Informationen