Обеспечение выполнения не более одного процесса одновременно - PullRequest
2 голосов
/ 24 апреля 2011

Существует несколько приложений, более чем один процесс которых не может быть запущен одновременно.Например, мы не можем запустить два экземпляра Windows Media Player.Даже если мы нажмем на exe несколько раз, другой процесс не запустится!

Мне было интересно, как это сделать в следующих ситуациях:

  • , еслиПриложение разработано на C ++.Приложение не должно быть приложением на основе графического интерфейса.
  • , если приложение разработано с использованием технологий .NET.Опять же, приложение не должно быть приложением на основе графического интерфейса.

Я абсолютно об этом не знаю, поэтому даже не знаю, как правильно сформулировать вопрос.Если я что-то упускаю (какие-либо подробности), пожалуйста, не стесняйтесь попросить разъяснений или предположить (если это возможно) в своем ответе.

Ответы [ 3 ]

3 голосов
/ 24 апреля 2011

Все они полагаются на одну и ту же хитрость: создайте хорошо известный именованный объект (обычно Mutex ) и заблокируйте его. Все экземпляры пытаются создать и заблокировать этот объект во время запуска, если он уже существует и не может быть заблокирован, тогда другой экземпляр уже запущен, поэтому вы закрывались.

3 голосов
/ 24 апреля 2011

Обычно приложению нужно попытаться получить какой-то уникальный ресурс при запуске; если это не удается, он должен выйти. Характер уникального ресурса зависит от среды - например, он может прослушивать определенный порт TCP или блокировать файл или сегмент общей памяти. Конечно, программа должна быть осторожна, чтобы освободить ресурс при его выходе.

0 голосов
/ 24 апреля 2011
private static Mutex m_Mutex;
m_Mutex = new Mutex(true, "myApp");

        if (m_Mutex.WaitOne(0, false))
            Application.Run(new MainForm());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...