Disons que j'ai une application écrite en C# appelée EquipCtrl.exe qui s'exécute comme un processus local sur un PC pour contrôler un équipement..NET - limiter le nombre d'instances d'une unité d'exécution
Évidemment, je souhaiterais n'avoir qu'une seule instance d'Equipctrl à exécuter sur chaque PC. Si j'avais deux équipements à contrôler par PC, je le limiterais à deux instances par PC.
Comme je l'ai fait était l'un des 1. Nom du processus. Je nomme le processus EqCtrl et au démarrage du processus, il compterait les processus de nombre avec le nom "EqCtrl". 2. Nom de l'exécution. Au démarrage, comptez le nombre de processus avec le nom d'exécution EquipCtrl.exe. 3. Enregistrement du registre. 4. Enregistrement de la base de données SQL Server.
Pour moi, le nom du processus ou la détection du nom d'exécution est le plus simple et ce que je fais le plus (sinon la totalité) du temps. Mais, ils sont susceptibles de conflit de noms. Même si je vais plus loin pour trouver le chemin d'exécution, la limite pourrait être contournée en copiant le fichier d'exécution dans un autre dossier.
Quelle est la meilleure façon d'effectuer une limitation d'exécution sur .NET? Pourquoi? Le registre est-il le meilleur moyen?
+1 (si je pouvais voter). J'ai utilisé ceci dans les applications C, et ça devrait marcher très bien en C#. Il y a un peu de travail à faire, comme vérifier si un autre processus a déjà créé le sémaphore. Sinon, essayez de le créer. Si cela existe déjà, vous devez voir si vous pouvez le verrouiller. Le verrou doit essayer de verrouiller le sémaphore avec un délai d'expiration. Si le délai expire, votre processus en est un de plus et devrait se terminer. Il y a un peu de travail pour bien faire les choses, mais c'est la bonne réponse à la question. –
Et utilisez un sémaphore nommé, avec toutes les instances de processus utilisant le même nom. –