2011-10-30 4 views
0

Windowsサービスについて質問したいと思います。 私のサービスコードは次のようになります。サービス - 終了コードを取得する方法

try 
{ 
    //... 
} 
catch 
{ 
    Environment.ExitCode = 1; 
} 

を、私は私のサービスをインストールした後、私は特定の時間にサービスを実行するようにスケジューリングシステムを使用しています:

net start MyService 
//or 
sc start MyService 

だから私の質問は、情報を取得する方法であり、私に例外があったら? この情報を取得するコマンドはありますか?今私は通常、10分後に私のアプリケーションを実行しています。サービスを停止します。私は、アプリケーションのエラーが発生した場合私に教えてくれる中間スケジューリングタスクを実行したい。私は "sc"のすべてのオプションを試しましたが、サービスに関する情報のみを提供します。

Contraints:

  • 私は、イベントログにエラーと例外をログに記録することができないか、ファイル
  • は、スケジューリングシステムでは私のコード
  • を変更ないでおく私は(バットスクリプトを使用することができますので、このザ・スクリプトがあります特定のあなたがあなたのサービスのために作成する1、またはSIMのいずれか - 標準的な方法はevent logにエラーと例外をログに記録することです
+0

ここでは、スタンドアロンの実行可能ファイルではなく、Windowsサービスとしてプログラムを実行する理由を考えます。あなたのサービスがサービスコントロールマネージャーによって実行されているときに、サービスとして実行されているプロセスの終了コードを取得する方法はないと思います。スケジューラを使用してオンデマンドでプロセスを実行する場合は、スタンドアロンの実行可能ファイルだけを使用することを検討してください。 – ig0774

答えて

1

)私は何かを変更することができますのみを配置このサービスをイベントログの新しいソースとして使用します。

WMIを使用して定期的にイベントログにエラーがないかどうかを確認できます。

+0

WMIは良い解決策ですが、私はそれを行うことはできません。私は私のスケジューリングシステムのすべてを持っていたい。 イベントログを作成できません。私はwinformアプリケーションのようなサービスから例外コードを取得する必要があります。 – Jack

+0

@ user1021060 - あなたの質問を更新し、あなたの持つ制約を説明してください。私が知る限り、イベントログに書き込むのに問題はありません。 – Oded

+0

@ user1021060 - 任意の_other_制約。私はあなたにファイルに書き込むように言うことができますし、あなたはそれもいいとは言えません。または、tcpソケットを使用する。または共有メモリ。 _all_制約を説明する必要があります。 – Oded

0

イベントログに記録できない場合は、独自の「イベントログ」を作成できますか?中間サービスが定期的にポーリングするファイルまたはデータベーステーブルを使用すると、目的が達成される可能性があります。

+0

私はその問題に対する制約を更新しました。自分のイベントログ、ファイル、またはデータベースを作成することはできません。 – Jack

関連する問題