.NET - ограничение количества экземпляров блока выполнения
-
08-10-2019 - |
Вопрос
Допустим, у меня есть приложение, написанное в 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.
Другие советы
Блог Скотта Хансельмана имеет отличный пост на этом ...
Хм .. Когда мы хотим разрешить только один экземпляр приложения, мы используем по имени Mutex.
Это точно не позволяет сценарию, которое вы хотите.
Другой момент, чтобы избежать столкновений, в дополнение к исполняемому имени и каталогу, используйте хеш MD5 исполняемого файла.
Вы можете сделать это с подсчетом с именем Mutex Semaphore, также убедитесь, что префикс Meatex / Semaphore, который вы создаете, запускаются с Global и локального , в противном случае удаленное настольное подключение для рабочего стола.
http://msdn.microsoft.com/en-us/library/ms682411(vs.85).aspx.