Forcer une application à être une instance unique?

Existe-t-il une façon de forcer une application sur Windows à être une application à une seule instance, c'est-à-dire ne pas lancer si une autre instance de la même application est déjà en cours d'exécution? Idéalement, je veux pouvoir le faire sans avoir besoin de remplacer l'application réelle par un talon, mais je n'aimerais pas l'utiliser si vraiment nécessaire.

Normalement, vous devez implémenter cette fonctionnalité "singleton" directement dans l'application. Si vous voulez le protéger "de l'extérieur", vous devez utiliser un wrapper qui vérifie, si vous avez déjà une autre instance. Il pourrait y avoir plus de solutions à cela, mais j'ai déjà fait l'affaire avec nsis . L'idée est la suivante:

À moins qu'il y ait une solution de contournement, vous pouvez appliquer avec le kit de compatibilité des applications qui le permet – ce que je doute (ce n'est pas le genre de chose qui lui-même brise la compatibilité 1 ) – alors il n'y a pas de configuration dans Windows.

Outre une application de lancement, l'autre approche serait de surveiller de nouveaux processus (p. Ex. Les événements de création d'instance de WMI pour les objets Win32_Process – filtrés par session bien sur) et d'effectuer des actions pour bloquer la seconde instance.


1 Bien sûr, un correctif peut être nécessaire lorsqu'une application utilise un mécanisme non pris en charge pour détecter plusieurs instances en soi, de sorte que le mécanisme de détection nécessite une cale.