Принудительно сделать приложение единственным экземпляром

Принудительно сделать приложение единственным экземпляром

Есть ли способ принудительно сделать приложение в Windows приложением с одним экземпляром, т. е. не запускать его, если уже запущен другой экземпляр того же приложения?

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

решение1

Обычно вам нужно реализовать эту "синглтонную" функцию прямо в приложении. Если вы хотите защитить его "извне", вам нужно использовать обертку, которая проверяет, запущен ли у вас другой экземпляр. Возможно, есть и другие решения, но однажды я проделал этот трюк снсисИдея такова:

  • создать «поддельный установщик», который сам по себе является лишь небольшой оболочкой вокруг приложения, которое вы хотите запустить
  • сделать этот установщик синглтоном. Смотрите здесьРазрешить только один экземпляр установщикаилиПроверьте, запущено ли ваше приложение
  • запустите свое приложение из этого "установщика оболочки". Смотрите здесьПлагин ExecCmd
  • "скрыть" от пользователя нормальный значок приложения и представить этот фальшивый установщик. Поскольку вы можете добавить к нему симпатичный значок, вы должны иметь возможность сделать его похожим на оригинальную программу.

решение2

Если нет обходного пути, вы можете подать заявку с помощьюКомплект совместимости приложенийкоторый это включает – в чем я сомневаюсь (это не то, что само по себе нарушает совместимость 1 ) – то в Windows нет никаких настроек.

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


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

Связанный контент