Mutex не найден, даже когда ОС сообщает, что он существует - PullRequest
2 голосов
/ 09 декабря 2011

Я создаю и использую мьютекс в службе Windows

using(var m = new Mutex(false,"mymutex")
{
    m.WaitOne();
    //to my things for a long time
    m.ReleaseMutex();
 }

В другой программе, работающей с правами администратора, я делаю

Mutex.OpenExisting("mymutex")

и бросает мьютекс не существует. В диспетчере ресурсов я вижу, что у службы Windows есть ссылка на мьютекс.

Что не так?

Ответы [ 2 ]

2 голосов
/ 09 декабря 2011

Объекты операционной системы, такие как Mutex, имеют область действия сеанса.Ваша служба работает в сеансе 0, поэтому ее мьютекс не виден процессам, которые выполняются в сеансе рабочего стола.Обходной путь прост, префикс Global\ к имени мьютекса.

0 голосов
/ 09 декабря 2011

Невежество не блаженство.EventWaitHandle.OpenExisting бросает WaitHandleCannotBeOpenedException

Похоже, поведение по умолчанию изменяется с учетной записи Localsystem на учетную запись пользователя.

...