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

Правильный способ .NET реализовать одно приложение-экземпляр

Я видел по крайней мере три разных метода для StackOverflow для достижения этого.

Я уверен, что есть и другие способы сделать это.

Мне просто интересно, является ли один из них предпочтительным и каковы могут быть последствия, если я выберу "неправильный".

4b9b3361

Ответ 1

В случае сомнений всегда предпочитайте реализацию, включенную в .NET framework. У вас могут быть большие надежды на то, что такая реализация проверена сотнями тысяч программистов, была тщательно проверена на безопасность и удобство использования и будет поддерживаться на долгие годы.

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

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

В WindowsFormsApplicationBase есть проблема с изображением в глазах программистов на С#. Они задыхаются от имени пространства имен и предполагают, что их программа каким-то образом будет заражена vb-isms. Эта глупость, это простой класс .NET, который можно использовать на любом языке.

Ответ 3

Это действительно вопрос вкуса, но я одобряю подход Mutex, просто потому, что он не требует зависимости от libbasic-библиотек, а использование Process.GetProcessNames является неидеальным решением (как уже упоминалось, имена процессов aren всегда собираюсь сопоставить то, что, по вашему мнению, может)