2016-10-18 21 views
1

Windowsサービスとして実行されるプロセスがあります。 このプロセスは、受信メッセージを処理するインターフェイスサーバーとして機能し、変換して別のインターフェイスに送信します。Windowsサービスが「開始済み」とみなされるタイミング

かなり重いプロセスです。多くのものをメモリに読み込む必要があり、時間がかかります(数分)。 その性質上、Windowsサービスを使用して起動すると、プロセスが既に動作していることがわかっていても非常に長い時間(時には20分以上)のステータスが「開始」のままですそのログによって行く)。

質問があります - サービスは「開始」とみなされ、「開始」とはいつですか?どのような要因に基づいて?

+0

各Windowsサービスは、SetServiceStatus関数を使用してサービスコントロールマネージャーに状態を報告します。サービスが開始されたことをWindowsに通知すると、サービスは「開始済み」とみなされます。 (.NET Frameworkで提供されているServiceBaseクラスを使用している場合、サービスはOnStart関数が返されるとすぐにサービスが開始されると報告します) –

答えて

1

オンスタートが完了すると、開始ステータスが終了します。

オンスタートイベントの後に開始コードを書き込む必要があります。

puclic class Service1 
{ 
     private Timer timer = new Timer(); 

     protected override void OnStart(string[] args) 
     { 
      this.timer.Elapsed += new ElapsedEventHandler(OnElapsedTime); 
      this.timer.Interval = 1 * 1000; // 1 second 
      this.timer.Enabled = true; 
     } 

     private void OnElapsedTime(object source, ElapsedEventArgs e) 
     { 
      this.timer.Enabled = false; // OnElapsedTime run only one time 

      // Write your code 
     } 
} 
+0

OPが.NETサービスについて話していると仮定しています。それは問題ありませんが、明示的にそう言わなければなりません。 –

+0

ありがとうございました!それは確かに.NETサービスでした、私はそれを言及すべきでした。 このOnStartオーバーライドがコード内にあることがわかりましたが、今ではほとんどの時間を消費する面でどの領域を探しますか。 – SwiftHands

関連する問題