УЧЕБНЫЕ МАТЕРИАЛЫ ПО ПРОГРАММИРОВАНИЮ, КРЕКИНГУ, 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 для определения имени исполняемого файла.
Используемая литература: