Для определения того, запущена ли еще одна копия нашей программы, воспользуемся объектом System.Threading.Mutex. Этот объект является оболочкой для системного объекта синхронизации mutex, который может существовать только в единственном экземпляре. Поэтому, если при его создании мы обнаружили, что объект уже был создан, значит, его создала предыдущая копия нашего приложения, которое еще не завершилось.
using System;
using System.Collections;
using System.Threading;
public class MyClass
{
private static Mutex _syncObject;
private const string _syncObjectName = "{E663FA11-AE0D-480e-9FCA-4BE9B8CDB4E7}";
public static void Main()
{
bool createdNew;
_syncObject = new Mutex(true, _syncObjectName, out createdNew);
if (!createdNew) {
Console.WriteLine("Копия уже запущена.");
return;
}
// Продолжаем выполнение
Console.ReadLine();
}
}