.NET - limitar el número de instancias de una unidad de ejecución
-
08-10-2019 - |
Pregunta
Digamos que tengo una aplicación escrita en C # llamado EquipCtrl.exe que se ejecuta como un proceso local en un PC para controlar una pieza de equipo.
Obviamente, yo desearía tener sólo una instancia de Equipctrl a ejecutar en cada PC. Si tuviera dos equipar al control por ordenador, me permitiría limitar a dos casos por PC.
La forma en que lo hice es decir era o bien una de 1. Nombre del proceso. Nombro el proceso EqCtrl y al proceso de puesta en marcha, sería contar los procesos número con el nombre de "EqCtrl". 2. Ejecución nombre. En el arranque contar el número de procesos con el nombre ejecución EquipCtrl.exe. 3. Registro de registro. 4. registro de base de datos SQL Server.
Para mí, el nombre del proceso o la detección nombre de ejecución es el más simple y lo que la mayoría (si no todos) de las veces hago. Pero, son susceptibles a nombrar choque. Incluso si voy más allá para averiguar la ruta de ejecución, el límite podría eludirse mediante la copia del archivo de ejecución a otra carpeta.
¿Cuál es la mejor manera de llevar a cabo la ejecución de limitación en .NET? ¿Por qué? Se registrará registro de la mejor manera?
Solución
Trate de un sistema en todo el semáforo: http://msdn.microsoft.com/en-us/library /system.threading.semaphore.aspx
Otros consejos
Blog de Scott Hanselman tiene un gran post sobre este ...
Hmm .. cuando queremos permitir sólo una única instancia de una aplicación se utiliza un mutex llamado
Esto no permite que exactamente el escenario que desea.
Otro punto, para evitar colisiones, además del nombre del ejecutable y directorio, utilice un hash MD5 del fichero ejecutable.
Se puede hacer esto con el conteo llamado mutex \ semáforo, también asegurarse de que el mutex / semáforo prefijo crea comienza con GLOBAL \ LOCAL y conexión \ escritorio remoto de lo contrario no va a leer estos mutex llamado y el recuento se perderán.
http://msdn.microsoft.com/en -US / library / ms682411 (VS.85) .aspx