2009-05-13 51 views
1

私は、Windowsサービスを通じてバックグラウンドで作業を行うためのアプリケーションを開発しています。 MSDNチュートリアルのおかげでサービスが作成されました。その後、正しく開始または停止できます。C#ExecuteCommandと停止したWindowsサービス

私のサービスでもカスタムコマンドを実行する必要があります。したがって、サービスのクラスで "OnCustomCommand"メソッドを実装しました。

コマンドIDが128から255までのカスタム実行コマンドを送信することができます。したがって、ネット上で見つかったすべてのコマンドを実行できます。

私の問題は: サービスが停止してもコマンドを実行できません。 はserviceControllerで呼び出すたびにSystem.InvalidOperationExceptionがスローされます。

Cannot control <myservice> service on computer '.' 

これは、サービスの実行中には発生しません。

MSDNあなたがExecuteCommandを呼び出すと、サービスの ステータスが変更されません

言います。 サービスが開始された場合、ステータス は実行中のままです。サービスが の場合、ステータスは停止したままになります( など)。

これは、停止サービスの場合はexecuteCommandになる可能性があります。

私のサービスはLocalSystemサービスとしてインストールされ、serviceControllerは管理者権限で実行されます。

誰でもこれを解決する方法を知っていますか?

答えて

3

停止したサービスに対してExecuteCommandを実行することはできません。私は、あなたが読んでいるドキュメントが、ExecuteCommandを呼び出すとサービスが停止しても起動しないことを伝えていると思います。あなたはまだメソッドを呼び出すことができると言っているわけではありません。本質的にメソッドを実行するオブジェクトは存在しません。私はあなたの最善の解決策は、サービスが停止しているかどうかを判断する方法を見つけることであり、サービスを再起動してからExecuteCommandを呼び出すことです。それ以外の場合は、「汚れたハック」を使用して呼び出しを試みることができます。失敗した場合は、例外をキャッチしてサービスを開始し、もう一度試してみてください。決して好ましいことではありませんが、可能です。

EDIT:

はあなたがサービスが実行されているかどうか判断するためにStatusプロパティを使用することができますServiceControllerを使用していると仮定。

+0

あなたが正しいかもしれません。それは奇妙だった私は2日を検索中に解決策を見つけませんでした。 MSDNのドキュメントは、この時点であいまいです... 私はそれに応じてアプリケーションを再編成します。 – Antwan

0

停止したサービスに対してコマンドを実行することはできません。

実行されていない場合は、送信するコマンドをリスンするために「そこに」存在しません。

関連する問題