.NET - ограничение количества экземпляров исполнительного блока - PullRequest
2 голосов
/ 12 ноября 2010

Допустим, у меня есть приложение, написанное на C #, которое называется EquipCtrl.exe, которое выполняется как локальный процесс на ПК для управления оборудованием.

Очевидно, я бы хотел, чтобы на каждом ПК работал только один экземпляр Equipctrl. Если бы у меня было два устройства для управления на ПК, я бы ограничил его двумя экземплярами на ПК.

То, как я это сделал, было одним из 1. Название процесса. Я называю процесс EqCtrl и при запуске процесса он будет считать число процессов с именем «EqCtrl». 2. Имя исполнения. При запуске подсчитайте количество процессов с именем выполнения EquipCtrl.exe. 3. Реестр записей. 4. Запись базы данных SQL Server.

Для меня обнаружение имени процесса или имени выполнения - самое простое и то, что я делаю больше всего (если не все) времени. Но они подвержены конфликтам имен. Даже если я пойду дальше и выясню путь выполнения, ограничение можно обойти, скопировав файл выполнения в другую папку.

Каков наилучший способ ограничения выполнения в .NET? Зачем? Является ли запись в реестре лучшим способом?

Ответы [ 4 ]

7 голосов
/ 12 ноября 2010

Попробуйте системный семафор: http://msdn.microsoft.com/en-us/library/system.threading.semaphore.aspx

1 голос
/ 12 ноября 2010

В блоге Скотта Хансельмана есть отличное сообщение на эту тему ...

http://www.hanselman.com/blog/TheWeeklySourceCode31SingleInstanceWinFormsAndMicrosoftVisualBasicdll.aspx

0 голосов
/ 12 ноября 2010

Вы можете сделать это путем подсчета именованного мьютекса \ семафора, также убедитесь, что созданный вами префикс мьютекса / семафора начинается с GLOBAL \ и LOCAL \, иначе подключение к удаленному рабочему столу не будет считывать эти именованные мьютекс и счет будет потерян.

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

0 голосов
/ 12 ноября 2010

Хм ... когда мы хотим разрешить только один экземпляр приложения, мы используем с именем mutex

, который не совсем включает сценарий, который вы хотите.

Еще один момент, чтобы избежать коллизий, помимо имени исполняемого файла и каталога, используйте MD5-хэш исполняемого файла.

...