Вы упомянули вы не хотите, чтобы проверить текущие имена процессов или использовать глобальный файл.
Блокировка текущего выполняемого
.NET Пример кода:
System.IO.File.Open(
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName,
System.IO.FileMode.Open,
System.IO.FileAccess.Read,
System.IO.FileShare.None);
FileShare.None держит любой другой процесс (например, Windows Explorer,) от выполнения файла до тех пор, пока приложение закрывается или файл handle (возвращенный объект) явно закрыт.
Global мьютекса
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682411%28v=vs.85%29.aspx
Если мьютекс именованный мьютекс и объект существовал до этого вызова функции , возвращаемое значение является дескриптор существующего объекта, GetLastError возвращает ERROR_ALREADY_EXISTS, bInitialOwner игнорируется, и вызывающему потоку не предоставляется право собственности. Однако, если вызывающий абонент имеет ограниченные права доступа, функция завершится с ERROR_ACCESS_DENIED, и вызывающий абонент должен использовать функцию OpenMutex.
Глобальный мьютекс - самый простой способ. Чтобы прояснить другой ответ, вы не просто проверяете возвращаемое значение, которое вы также проверяете на значение GetLastError.
Разве этот ответ не делает предположений о lanuguage/framework? – eidsonator
спасибо! но моя программа многопоточена, и я уже использую мьютекс в качестве критического управления разделами ... это будет проблемой? – daehee