Как предотвратить повторный запуск приложения | OTUS

Как предотвратить повторный запуск приложения

l5zR6K7zKzQ-5020-dd8ed2.jpg

Бывают ситуации, когда должна выполняться строго одна копия приложения. Например, это связано с авторизацией на некотором сервисе или работой с внешними устройствами.

В WinAPI данная проблема решалась просто: WinMain получал указатель на прошлый экземпляр запущенной программы. В C# мне о такой возможности не известно. Существует по крайней мере два способа решения задачи: поиск процессов идентичных себе и установка Mutex.

Оба способа имеют как преимущества, так и недостатки

В первом случае поиск осуществляется по имени процесса, но всегда можно переименовать программу перед повторным запуском. Во втором случае возможна атака за счёт генерации такого же Mutex злоумышленником.

Рассмотрим оба способа

Вариант с Mutex:

static bool IsSingleInstance()
{
   bool flag;
    Mutex mutex = new Mutex(true, "MY_UNIQUE_MUTEX_NAME", out flag);
    return flag;
}

Вариант с процессом:

if (Process.GetProcesses().Count(x=>x.ProcessName=="MyProcessName")>1)
    Process.GetCurrentProcess.Kill();

Имя процесса можно узнать с помощью Process.GetCurrentProcess().ProcessName. Кроме того, для WindowsForms существует отдельный способ запуска ровно одной копии приложения, но он выходит за рамки данной заметки.

Есть вопрос? Напишите в комментариях!

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто