我做了一個簡單的Windows服務,但是當我嘗試啓動它,它與下面的消息會立即關閉:我如何保持我的Windows服務活着?
本地計算機上的ConsumerService服務啓動,然後停止。某些服務如果未被其他服務或程序使用,則會自動停止。
以下是我嘗試運行服務:
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
var servicesToRun = new ServiceBase[]
{
new ConsumerService()
};
ServiceBase.Run(servicesToRun);
}
}
public partial class ConsumerService : ServiceBase
{
private readonly MessageConsumer<ClickMessage> _messageconsumer;
private readonly SqlRepository _sqlrep;
private static Timer _timer;
public ConsumerService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
try
{
File.Create(@"c:\ErrorLog.txt");
WriteToFile("Has started : " + DateTime.UtcNow);
var t = new Timer(OnTimeEvent, null, 1000, 1000);
}
catch (Exception e)
{
WriteToFile("Error : " + e.Message);
}
}
private void OnTimeEvent(object state)
{
WriteToFile("The time is : " + DateTime.UtcNow);
}
protected override void OnStop()
{
WriteToFile("Has stopped : " + DateTime.UtcNow);
}
private static void WriteToFile(string s)
{
var stream = File.AppendText(@"c:\ErrorLog.txt");
stream.WriteLine(s);
}
}
正如你所看到的,這只是一個簡單的定時器寫一行到每1秒文件,所以我很困惑,爲什麼這應該阻止服務運行。我也很難看到由windows給出的消息與這個服務有什麼關係,因爲這會阻止任何服務運行,除非已經依賴它。
您的代碼只運行一次,然後關閉。它的工作就像你寫的一樣。 –
@Ramhound - 我確定計時器實際上是在'InitializeComponent();'方法調用中啓動的。然後代碼將運行多次。他可能只是從帖子中省略了代碼,但是有一種方法可以捕獲「OnTimeEvent」,所以你可以想象他已經對它的那部分進行了排序。 – hofnarwillie