Domanda

Diciamo che ho un'applicazione scritta in C # chiamato EquipCtrl.exe che viene eseguito come un processo locale su un PC per controllare un pezzo di equipaggiamento.

Ovviamente, io vorrei avere una sola istanza di Equipctrl da eseguire su ogni PC. Se ho avuto due dotare di controllo per PC, vorrei quindi limitare a due istanze per PC.

Il modo che ho fatto è stato uno di 1. Nome del processo. Nomino il processo EqCtrl e al processo di start-up, sarebbe contare i processi di numero con il nome "EqCtrl". 2. nome di esecuzione. All'avvio contare il numero di processi con il nome di esecuzione EquipCtrl.exe. 3. record di Registro di sistema. 4. record di database di SQL Server.

Per me, il nome del processo o il rilevamento del nome di esecuzione è il più semplice e quello che faccio la maggior parte (se non tutti) del tempo. Ma, essi sono suscettibili di nominare scontro. Anche se vado oltre per scoprire il percorso di esecuzione, il limite potrebbe essere aggirato copiando il file di esecuzione in un'altra cartella.

Qual è il modo migliore per eseguire l'esecuzione limitare il .NET? Perché? È Registro di registrare il modo migliore?

È stato utile?

Soluzione

Altri suggerimenti

Hmm .. quando vogliamo consentire solo una singola istanza di un'applicazione che usiamo un nome mutex

Che non esattamente abilitare lo scenario che si desidera.

Un altro punto, per evitare le collisioni, oltre al nome del file eseguibile e la directory, utilizzare un hash MD5 del file eseguibile.

Si può fare questo con il conteggio di nome mutex \ semaforo, anche assicurarsi che il mutex / semaforo prefisso di creare inizia con GLOBAL \ e LOCAL \ connessione desktop remoto altrimenti non leggerà questi nome mutex e conteggio sarà perso.

http://msdn.microsoft.com/en -us / library / ms682411 (VS.85) aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top