.NET - ограничение количества экземпляров блока выполнения

StackOverflow https://stackoverflow.com/questions/4159694

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

Другие советы

Блог Скотта Хансельмана имеет отличный пост на этом ...

http://www.hanselman.com/blog/theweeklysourcecode31singleInstancewinformsandmicrosoftvisualbasicdll.aspx.asp.aspx.asp.asp.asp.asp.

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

Это точно не позволяет сценарию, которое вы хотите.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top