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?

¿Fue útil?

Solución

Otros consejos

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top