Господа, кто с таким сталкивался.
В windows сервисе (не важно под каким account запускается) создается именованный мьютекс с "хорошими" правами доступа:
MutexSecurity mSec = new MutexSecurity();
SecurityIdentifier sidOwner = new SecurityIdentifier(WellKnownSidType.CreatorOwnerSid, null);
SecurityIdentifier sidAuthUser = new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null);
MutexAccessRule rule = null;
rule = new MutexAccessRule(sidOwner, MutexRights.FullControl, AccessControlType.Allow);
mSec.AddAccessRule(rule);
rule = new MutexAccessRule(sidAuthUser, MutexRights.FullControl, AccessControlType.Allow);
mSec.AddAccessRule(rule);
this.testmutex = new Mutex(true, mutname, out muNew, mSec);
Запускается некоторое приложение, которое проверяет существование мьютекса,
скажем при помощи Mutex.OpenExisting(...). Вылетает exception — No handle of the given name exists.
При этом если таким же образом создать мьютекс в консольном приложении, то Mutex.OpenExisting(...)
возвращает мьютекс и никаких ошибок не возникает.
Такое поведение наблюдается под Vista, Server 2003. Под ХР, кстати, все хорошо.
Кто что может сказать ?
Re: Не виден named mutex созданный windows сервисом.
От:
Аноним
Дата:
29.04.08 13:06
Оценка:
Возможно, в Server 2003 и Vista пользователь залогинен в сессии Terminal Service.
В этом случае запросы к объектам ядра по умолчанию перенаправляются в пространство имен текущей сессии.
А сервис создает свои объекты в глобальном пространстве имен.
Можно попробовать явно создавать и запрашивать мьютекс в глобальном пространстве имен.
Т.е.
..
this.testmutex = new Mutex(true, "Global\\" + mutname, out muNew, mSec);
..
Открывать из пользовательского приложения аналогично