3

常に事前に開始していた動作中のWindowsサービスを変更しました。System.Management参照を追加した後、自動的に起動しない場合があります。次のエラーが発生します。

サービスを開始できません。System.Runtime.InteropServices.COMException(0x80010002):呼び出しがメッセージフィルターによってキャンセルされました。(HRESULTからの例外:0x80010002(RPC_E_CALL_CANCELED))

同じ問題を抱えている人とのSOに関する別の投稿をここで見つけました。

再起動後に.NetWindowsサービスが自動的に開始されないのはなぜですか?

ただし、提案された解決策は、依存するサービスが開始された後にサービスを開始することでした。ただし、サービスの[依存関係]タブに移動すると、次のように表示されます。

代替テキスト

スレッドをスリープ状態にする回避策を使用する必要がありますか、それともこのサービスを正しく開始するためのより適切な方法がありますか?これは、サービスが開始する前に.NETが開始されていないために発生していますか?

ありがとう、

トメック

編集:例外をキャッチするためにtry-catchステートメントを追加しました。これが私のサービスのOnStart()メソッドに追加したコードです(これは例外がスローされている場所です)

        try
        {
            _watcher = new ManagementEventWatcher(query);
            _watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
            _watcher.Start();  
        }
        catch (Exception ex)
        {
            EventLog.WriteEntry("Could not create Sleep/Resume watcher" + ex.Message);
        }

サービスは今すぐ開始されますが、私が追加した機能はありません。私は.NETを初めて使用しますが、オンラインで見つけたサンプルからウォッチャーコードを取得したので、それが正しいと確信しています。イベントログには同じ例外が表示されます。

スリープ/レジュームウォッチャーを作成できませんでした通話がメッセージフィルターによってキャンセルされました。(HRESULTからの例外:0x80010002(RPC_E_CALL_CANCELED))

4

4 に答える 4

8

私自身もこの問題を抱えていましたが、どうやらWindows XPでのみ発生します(VistaやWin 7では発生しません)。これを修正するには、WindowsManagementInstrumentationサービスに依存関係を追加する必要があります。この依存関係を既存のサービスに追加するには、次の3つの簡単な手順を実行します。

  1. コマンドプロンプトを開きます(Windows + R-> cmd-> enter)
  2. タイプ:sc config "NAME_OF_YOUR_SERVICE"depend = winmgmt
  3. Enterキーを押すと、次のように表示されます。[SC] ChangeServiceConfig SUCCESS

コンピュータを再起動すると、サービスが正しく開始されます。

于 2012-11-19T13:00:37.927 に答える
1

問題はサービス自体にあるのではなく、参照を追加した新しいコンポーネントが未処理の例外をスローしていることです(呼び出しはメッセージフィルターによってキャンセルされました)。追加したコードでそのエラーメッセージのトラブルシューティングを行うか、エラー処理を改善して、そのコンポーネントのエラーが一番上に表示されてサービスが停止しないようにします:-)

于 2010-03-08T20:56:11.260 に答える
0

別のサービスに依存している場合は、sc.exeを使用して、依存関係の後に開始するようにサービスを構成します。これは、サービスアプレットを介して実行することはできません。

于 2010-03-08T21:17:44.687 に答える
0

ManagementEventWatcherを作成する直前(tryステートメントの前)にThread.Sleep(10000)を使用することになりました。

これは一種の回避策ですが、問題は解決しました。

于 2010-03-08T23:08:37.637 に答える