J'ai créé une application de barre d'état système en C#, qui fonctionne en arrière-plan. Il écoute sur un serveur de messagerie à l'aide d'Exchange WebServices et exécute un ensemble d'actions chaque fois qu'un mailaccount reçoit un message. Il utilise un certain nombre d'applications Excel, ce qui ne fonctionne pas correctement si je convertis en programme pour un service (c'est pourquoi il doit être une application d'essai du système).Comment puis-je m'assurer qu'un programme ne s'exécute qu'une seule fois sur toutes les sessions d'un serveur Windows 2012?
Il est important que le programme ne tourne pas plus d'une fois à la fois. J'ai ajouté un verrou mutex, donc je ne peux pas exécuter le programme plus d'une fois sur la même session. Le problème est cependant, quand je me connecte à une autre session sur Windows Server (il peut avoir deux sessions par utilisateur), le programme n'est pas visible dans la barre d'état système, et je peux l'ouvrir à nouveau. session. Comment puis-je empêcher cela?
Merci
Créez un fichier avec un nom réservé, par ex. 'C: \ temp' et gardez-le verrouillé, donc l'instance # 2 remarquera et quittera? –
Quel est le nom du mutex? Si le nom de mutex commence par Global, il est global pour toutes les sessions de services de terminal. Vous devriez également vérifier les permissions de mutex afin qu'il soit accessible par tous les utilisateurs. –
voir cette question SO http://stackoverflow.com/questions/229565/what-is-a-good-pattern-for-using-a-global-mutex-in-c –