私は現在、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);
*: EventWaitHandleSecurity MSDN
プログラムをコンソールアプリケーションとして実行すると、これは魅力のように機能します。メインアプリケーションからイベントを簡単にキャッチして、意図したとおりに処理できますが、アプリケーションをサービスとしてインストールすると、同じ名前のイベントを待ってロックされますしかし、信号を受信することはありません。サービスは NT AUTHORITY\LOCALSERVICE アカウントを使用して実行するように設定されています。自分のアカウント (コンソール アプリケーションとして実行中にプログラムが使用するアカウント) を使用してみましたが、何も起こりません。
シグナルを発信するアプリケーションが自分のアカウントで実行されているのに役立つ場合。私はWindows用のデスクトップアプリケーションを開発する完全な初心者なので、助けていただければ幸いです。