Le code ci-dessous est également erroné !! Code correct comme ci-dessus !!
Parfois, il faut autoriser une seule instance de l’application à s’exécuter, et lorsque le processus démarre, si elle découvre qu’une instance de l’application s’exécute, elle s’arrête automatiquement. Nous l’implémentons généralement dans la fonction Main via un mutex Mutex, qui s’écrit généralement :
Lorsque nous cherchons des réponses, nous allons et venons souvent à la hâte, ignorant les fonctionnalités et précautions de Mutex. Après un test simple, OK, passez-le et utilisez-le. À ce stade, nous oublions une condition importante :Conventions de nommage Mutex. La méthode d’écriture ci-dessus fonctionne sans aucun problème sous un seul utilisateur ; Sous multi-utilisateur, chaque utilisateur peut lancer une instance, donc une instance unique ne peut pas être garantie.
Si vous devez l’utiliser sur un serveur terminal et n’autoriser qu’une seule instance, utilisez la méthode suivante :
Voici la description du MSDN :
Sur les serveurs exécutant des services de terminal, le mutex système nommé peut avoir deux niveaux de visibilité. Si le nom commence par le préfixe « Global\ », le mutex est visible dans toutes les sessions du serveur de terminal. Si le nom commence par le préfixe « Local\ », le mutex n’est visible que dans la session serveur de terminal qui l’a créé. Dans ce cas, chaque autre session de serveur terminal sur le serveur peut avoir un mutex distinct portant le même nom. Si vous créez un mutex nommé sans spécifier de préfixe, il prendra le préfixe « Local\ ». Dans une session serveur de terminal, deux mutex avec des préfixes de noms différents sont mutex indépendants, et les deux mutex sont visibles pour tous les processus de la session serveur de terminal. Autrement dit, les préfixes « Global » et « Local » décrivent la plage du nom mutex par rapport à la session du serveur de terminal, et non par rapport au processus.
|