サービスとコンソール アプリケーションを含む Vista でアプリケーションを作成しています。どちらも同じユーザー アカウントで実行されています。
サービスでは、イベントを作成し、そのイベントを待ちます。コンソール アプリケーションでは、同じイベントを開き (問題はここから始まります)、SetEvent関数を呼び出します。コンソール アプリケーションでイベントを開くことができません (エラー 5 の取得、アクセスが拒否されました)。ネットで検索したところ、整合性レベルに関する情報が表示されました (問題が整合性レベルに関連しているかどうかはわかりません)。アプリケーションはさまざまな整合性レベルを取得しました。
ここにIPCが発生するコードの一部があります
サービス
DWORD
WINAPI IpcThread(LPVOID lpParam)
{
HANDLE ghRequestEvent = NULL ;
ghRequestEvent = CreateEvent(NULL, FALSE,
FALSE, "Global\\Event1") ; //creating the event
if(NULL == ghRequestEvent)
{
//error
}
while(1)
{
WaitForSingleObject(ghRequestEvent, INFINITE) //waiting for the event
//here some action related to event
}
}
コンソール アプリケーション
ここでは、アプリケーションで、イベントを開いてイベントを設定します
unsigned int
event_notification()
{
HANDLE ghRequestEvent = NULL ;
ghRequestEvent = OpenEvent(SYNCHRONIZE|EVENT_MODIFY_STATE, FALSE, "Global\\Event1") ;
if(NULL == ghRequestEvent)
{
//error
}
SetEvent(ghRequestEvent) ;
}
管理者権限で両方のアプリケーション (サービスとコンソール アプリケーション) を実行しています (管理者としてログインし、右クリックして [管理者として実行] オプションを使用してコンソール アプリケーションを実行しています)。
コンソール アプリケーション (イベントを開いている場所) で発生するエラーは、エラー番号 5(アクセスが拒否されました。) です。
Vistaでサービスとアプリケーション間のIPCを行う方法を教えていただけると大変助かります。
前もって感謝します
ナバニース