2011-05-11 19 views
1

私はWin 7 Pro 64-bitを実行しています。私は.NET 4フレームワークを使ってC#でサービスを書いた。正しくインストールされ、実行を開始します。私はそれがいくつかの出力をログファイルに書き込むため、実行されていることを知っています。しかし、数秒後に死ぬ。 Visual Studio 2010 Proを使用して同じコードをサービスとしてではなく実行すると、決して死ぬことはありません。だから私の明らかな問題は、なぜそれがサービスとして死ぬべきだが、非サービスとして死ぬのを理解できないので、これをデバッグするための適切なアプローチに関するものです。私はコードのいくつかの場所でログファイルに書き込みを入れましたが、毎回別の場所で死にそうです。アプリケーションには3つのスレッドがあります。どんな提案も歓迎されます。サービス実行が終了する

+0

Windowsイベントログには何かがありますか? – keyboardP

+0

毎回同じスレッドが最初に死んでいますか? – soandos

+2

あなたのロジックは「スタート()」メソッドにありますか? –

答えて

0

System.Diagnostics.Debugger.Launchを使用してサービスとして実行し、デバッグします。そのシナリオでクラッシュしない場合は、追加のロギングを追加し、最上位のキャッチを追加してエラーを書き留めてください。それでもやらなければ、クラッシュダンプファイルを作成し、SOSとwindbgで調べてください。

4

サービスの開始メソッドから直接コードを実行している場合、この現象は簡単に発生します。問題は、サービスのStartメソッドがサービスを開始すると予想され、がすぐにを返すことです。そこにコードを実行すると、Windowsがサービスを停止します。

これを処理する正しい方法は、サービスのStart()メソッドでコードを専用スレッドで実行させることです。スレッドの作成と即時リターンを除いて、実際には何も必要はありません。これが問題の場合は、フォアグラウンドスレッドを設定してそこにロジックを置くだけで正しく動作するでしょう。