2016-10-21 13 views
0

TopShelfを使用して最初の.Netサービスを作成しましたが、サービスコードが1回だけ実行されるという問題が発生しています。Windowsサービスは一度だけ実行する

private static void Main(string[] args) 
    { 
     HostFactory.Run(x => 
     { 
      x.Service<ServiceProcess>(s => 
      { 
       s.ConstructUsing(name => new ServiceProcess()); 
       s.WhenStarted(tc => tc.Start()); 
       s.WhenStopped(tc => tc.Stop()); 
      }); 

      x.StartAutomatically(); 
      x.RunAs(Username, Password); 
     }); 
    } 

に従い、以下のように一度だけ実行される方法があるように私は、サービスのメインを設定しています。

using System.Timers; 

public class ServiceProcess 
{ 
    private readonly Timer _timer; 

    public ServiceProcess() 
    { 
     _timer = new Timer(1000) { AutoReset = false }; 
     _timer.Elapsed += (sender, eventArgs) => EventLog.WriteEntry(ServiceName, "It is " + DateTime.Now, EventLogEntryType.Information); 
    } 
} 

私はメッセージが正しく書かれていることをイベントログで確認することができますが、それは一度だけ発生します。これが最も基本的な構成なので、なぜこれが動作しないのかはわかりません。私はタイミングを練って例外処理を追加しようとしましたが、最終的には再び実行されないようです。

私のStart()Stop()のメソッドはそれぞれ_timer.Start()_timer.Stop()を実行しています。

答えて

2

タイマーのAutoResetプロパティをtrueに設定します。

+0

私の防衛では、私は同僚から悪い情報を与えられました。 ;)あなたに簡単なポイントを与えることを幸せ。 – McArthey

+0

私は誰にでもこのリンクを提供したいと思っていました。これはTopShelfに固有のものではなく、サービスプロパティです。https://msdn.microsoft.com/en-us/library/system.timers.timer.autoreset(v=vs.110).aspx – McArthey

関連する問題