Я думаю, вам нужно немного рассмотреть свой сценарий, прежде чем идти вперед. Существует много разных интерпретаций «запуска одной и той же программы» более одного раза. Например, вы
- Один раз на машину
- Один раз за сеанс входа в систему
- Один раз на пользователя
Все они имеют разные, хотя и похожие, решения.
Проще всего описать на каждую машину. В этом случае вы хотите создать именованный Mutex. При каждом запуске каждая программа должна получить этот мьютекс, если они успешны, они запускаются и удерживают Mutex в течение всего времени жизни процесса. В противном случае запускается какая-то другая программа, и они немедленно закрываются.
К сожалению, у этого подхода есть свои недостатки. Если я хочу испортить вашу программу, я могу создать мьютекс с тем же именем. Это предотвратит запуск вашей программы любым экземпляром, потому что они не могут определить, кто владеет Mutex, просто что-то содержит мьютекс.