我目前正在使用 c# 和 .net framework 4.5 开发一个 Windows 服务,以扩展现有专有应用程序的功能,该服务阻塞在 EventWaitHandleClass ( msdn link ) 上,等待从主应用程序发出的命名事件。像这样的东西:
bool boolWithFalse = false;
string eName = "notification_event";
string usr = Environment.UserDomainName + "\\" + Environment.UserName;
EventWaitHandleSecurity security = new EventWaitHandleSecurity(); //*
EventWaitHandleAccessRule rule = new EventWaitHandleAccessRule(usr, EventWaitHandleRights.Synchronize, AccessControlType.Allow);
security.AddAccessRule(rule);
EventWaitHandle handle = new EventWaitHandle(false, EventResetMode.ManualReset, eName, out boolWithFalse, security);
//... some non relevant code lines here
//This is where the it locks waiting for the named event
var w = EventWaitHandle.WaitAny(new[] { handle }, Timeout.Infinite);
现在,如果我将程序作为控制台应用程序执行,这就像一个魅力,我可以轻松地从主应用程序捕获事件并按照我的意图处理它们,但是,当我将应用程序安装为服务时,它会锁定等待这个相同的命名事件但永远不会收到信号。该服务设置为使用 NT AUTHORITY\LOCALSERVICE 帐户运行,我已经尝试使用我自己的帐户(程序在作为控制台应用程序运行时使用),但没有任何反应。
如果它有助于发起信号的应用程序在我自己的帐户下运行。感谢任何帮助,因为我是为 Windows 开发桌面应用程序的完整初学者。