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()
を実行しています。
私の防衛では、私は同僚から悪い情報を与えられました。 ;)あなたに簡単なポイントを与えることを幸せ。 – McArthey
私は誰にでもこのリンクを提供したいと思っていました。これはTopShelfに固有のものではなく、サービスプロパティです。https://msdn.microsoft.com/en-us/library/system.timers.timer.autoreset(v=vs.110).aspx – McArthey