掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Vistaでサービスで起動している実行ファイルとユーザが起動している実行ファイルでイベントのやり取りをするには? (ID:68536)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
いつもお世話になっております。 今、2つの実行ファイルを作成しており、一つはサービスとしてローカルシス テムアカウントで、もう一つはユーザアカウントで実行するアプリケーション を作っています。 以下のようなソースでサービス側でCreateEvent関数を使ってイベントハンド ルを作成し、クライアント側でOpenEventを行ってイベントのハンドルを取得 しているのですが・・・ /**************************サービス側***************************** HANDLE hEventSvToCl = NULL; //サーバ→クライアント用イベントハンドル HANDLE hEventClToSv = NULL; //クライアント→サーバ用イベントハンドル SECURITY_ATTRIBUTES l_sa; SECURITY_DESCRIPTOR l_sd; //セキュリティ偽装の準備 if(!InitializeSecurityDescriptor(&l_sd, SECURITY_DESCRIPTOR_REVISION)) { return -10; } if(!SetSecurityDescriptorDacl(&l_sd, TRUE, NULL, FALSE)) { return -20; } l_sa.nLength = sizeof(SECURITY_ATTRIBUTES); l_sa.bInheritHandle = FALSE; l_sa.lpSecurityDescriptor = &l_sd; //クライアントから受ける為のイベントハンドルの作成 hEventClToSv = CreateEvent(&l_sa, FALSE, FALSE, "ClToSv"); //クライアントに書き込むことを通知するイベントを作成 hEventSvToCl = CreateEvent(&l_sa, FALSE, FALSE, "SvToCl"); //どちらか一方が作成できなかったらエラー if(hEventSvToCl == NULL || hEventClToSv == NULL) { return -30; } /**********************クライアント側***************************** hEventClToSv = OpenEvent(EVENT_ALL_ACCESS, FALSE, "ClToSv"); if(hEventClToSv == NULL) { MessageBox(hWnd, "起動エラー\n\nサーバへ送るイベントを取得できませんでした。", ClassName, MB_OK); DestroyWindow(hWnd); PostQuitMessage(0); break; } //サーバから受け取るイベントの作成 hEventSvToCl = OpenEvent(EVENT_ALL_ACCESS, FALSE, "SvToCl"); if(hEventSvToCl == NULL) { MessageBox(hWnd, "起動エラー\n\nサーバから受け取るイベントを取得できませんでした。", ClassName, MB_OK); DestroyWindow(hWnd); PostQuitMessage(0); break; } かなりはしょっていますが・・・こんな感じです。 Windows 2000、XPでは問題なく起動するのですが、Vistaだと「サーバへ送る イベントを取得できませんでした。」のメッセージボックスがでてしまいます。 XPまでとVistaでは、イベントのやり取りをするときに何か特殊なセキュリテ ィ設定などが必要なのでしょうか? 実際にはこのイベントハンドルを使って、サービスとクライアント間で名前付きパイプのやり取りをさせています(XPまでは問題なく動作していました)。 ご存じの方いらっしゃいましたら、ご教授をお願いできますでしょうか? よろしくお願いいたします。 開発環境はWindows XP SP2 + VS 2005 Team Edition + Windows SDK(日本語 6000.0.18) です。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.