Вы можете использовать глобальный мьютекс.
Threading в C # имеет хороший пример (скопированный ниже для удобства) о том, как использовать именованный мьютекс для проверки того, что на машине может выполняться только один экземпляр приложения.
Вы можете расширить этот пример, чтобы убедиться, что существует только один экземпляр объекта.
class OneAtATimePlease {
// Use a name unique to the application (eg include your company URL)
static Mutex mutex = new Mutex (false, "oreilly.com OneAtATimeDemo");
static void Main() {
// Wait 5 seconds if contended – in case another instance
// of the program is in the process of shutting down.
if (!mutex.WaitOne (TimeSpan.FromSeconds (5), false)) {
Console.WriteLine ("Another instance of the app is running. Bye!");
return;
}
try {
Console.WriteLine ("Running - press Enter to exit");
Console.ReadLine();
}
finally { mutex.ReleaseMutex(); }
}
}
Есть еще одна вещь, на которую вам может понадобиться обратить внимание.
Когда использует именованный мьютекс на сервере, работающем в службах терминалов , именованный мьютекс может иметь два уровня видимости, Глобальный для всех сеансов (имя с префиксом "Global\
") или Local для сеанса сервера терминалов (имя с префиксом" Local\
", будет использоваться по умолчанию, если префикс не указан).
Подробнее о Mutex вы можете узнать в MSDN: Mutex Class .