Ответ 1
Вы сказали несколько экземпляров одного приложения, поэтому мы говорим о двух запусках program.exe, правильно? Оператор блокировки не будет блокировать несколько программ, как раз внутри программы. Если вам нужен настоящий Mutex, посмотрите на объект System.Threading.Mutex.
Вот пример использования:
bool createdNew;
using (Mutex mtx = new Mutex(false, "MyAwesomeMutex", out createdNew))
{
try
{
mtx.WaitOne();
MessageBox.Show("Click OK to release the mutex.");
}
finally
{
mtx.ReleaseMutex();
}
}
Созданная новая переменная сообщит вам, была ли она создана в первый раз. Тем не менее, он говорит только, был ли он создан. Если вы хотите приобрести блокировку, вам нужно вызвать WaitOne, а затем вызвать ReleaseMutex, чтобы освободить ее. Если вы просто хотите посмотреть, был ли вы создан Mutex, просто построить его хорошо.