УЧЕБНЫЕ МАТЕРИАЛЫ ПО ПРОГРАММИРОВАНИЮ, КРЕКИНГУ, HTML, CSS, ОФИСНЫМ ПРИЛОЖЕНИЯМ
Разрешение запуска только одного экземпляра приложения
ЗАДАЧА
Вы хотите гарантировать, что в конкретный момент времени сможет выполняться только один экземпляр вашего приложения.
РЕШЕНИЕ
Изучите в стартовом коде приложения выполняющиеся процессы и определите, загружено ли уже ваше приложение.
ОБСУЖДЕНИЕ
Для запрещения запуска нескольких экземпляров приложения нужно просто отказывать ему в запуске при наличии уже выполняющегося экземпляра.
Изучить выполняющиеся в данный момент процессы позволяет класс
System.Diagnostics.Process.
В качестве примера рассмотрим простое консольное приложение. Скорее всего при нахождении выполняющегося экземпляра вы просто тихо завершили бы приложение во время его запуска, но в этом примере мы выводим сообщение, призванное облегчить тестирование:
using System; using System.Diagnostics; namespace OneInstanceTest { class Program { static void Main(string[] args) { Process[] Proc; // Определение полного имени текущего процесса. string ModuleName, ProcName; ModuleName = Process.GetCurrentProcess().MainModule.ModuleName; ProcName = System.IO.Path.GetFileNameWithoutExtension(ModuleName); // Нахождение всех процессов с данным именем. Proc = Process.GetProcessesByName(ProcName); if (Proc.Length > 1) { // Данное имя имеют несколько процессов, поэтому // текущий экземпляр следует завершить Console.WriteLine("Этот экземпляр должен быть завершен"); } else { Console.WriteLine("Этот экземпляр может работать"); } Console.ReadLine(); } } }
Помните этот тест требуется выполнять при запуске программы.
Если вы подозреваете, что другая программа может иметь такое же ймя, что и ваша, то можете получить полный список процессов, вызвав метод Process.GetProcesses, и изучить каждый из них подробнее. Например, вы можете изучить свойство Process.MainModule для определения имени исполняемого файла.
Используемая литература: