.NET - limiter le nombre d'instances d'une unité d'exécution
-
08-10-2019 - |
Question
Disons que j'ai une demande écrite en C # appelé EquipCtrl.exe qui fonctionne comme un processus local sur un PC pour contrôler un appareil.
De toute évidence, je voudrais avoir qu'une seule instance de Equipctrl à exécuter sur chaque PC. Si je devais deux donner les moyens de contrôle par PC, je puis limiter à deux instances par PC.
La façon dont je l'ai fait est était l'une des 1. Nom du processus. Je nomme le processus EqCtrl et au processus de démarrage, il compte les processus numériques avec le nom « EqCtrl ». 2. Nom d'exécution. Au démarrage compter le nombre de processus avec le nom d'exécution EquipCtrl.exe. 3. Enregistrement du Registre. 4. enregistrement de base de données SQL Server.
Pour moi, le nom du processus ou la détection de nom d'exécution est le plus simple et ce que je fais la plupart (sinon la totalité) du temps. Mais, ils sont susceptibles de nommer heurt. Même si je vais plus loin pour trouver le chemin d'exécution, la limite peut être contournée en copiant le fichier d'exécution dans un autre dossier.
Quelle est la meilleure façon d'effectuer l'exécution de limiter le .NET? Pourquoi? Est enregistrer registre de la meilleure façon?
La solution
Essayez un système à l'échelle Sémaphore: http://msdn.microsoft.com/en-us/library /system.threading.semaphore.aspx
Autres conseils
Le blog de Scott Hanselman a un post sur ce ...
Hmm .. quand on veut permettre à une seule instance d'une application, nous utilisons
Vous pouvez le faire avec le comptage nommé mutex \ sémaphores, assurez-vous que le préfixe mutex / sémaphores vous créez aussi commence par GLOBAL \ et LOCAL \ connexion de bureau sinon à distance ne sera pas lire ces mutex nommé et le nombre sera perdu. http://msdn.microsoft.com/en -us / bibliothèque / ms682411 (VS.85) .aspx