Вы можете использовать глобальный мьютекс.
В Threading in 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 а>.
person
Chansik Im
schedule
08.08.2009