namespace SuperService
{
partial class Logger : ServiceBase
{
public Logger()
{
InitializeComponent();
}
void timer1_Tick( object sender, EventArgs e )
{
LogEvent( "This Timer has been ticked!", EventLogEntryType.Information );
}
protected override void OnStart( string[] args )
{
timer1.Tick += new EventHandler( timer1_Tick );
timer1.Start();
LogEvent( "This SuperService has started!", EventLogEntryType.Information );
}
protected override void OnStop()
{
LogEvent( "This SuperService has stopped.", EventLogEntryType.Information );
}
protected override void OnPause()
{
base.OnPause();
timer1.Stop();
}
protected override void OnContinue()
{
base.OnContinue();
timer1.Start();
}
static void LogEvent( String Message, EventLogEntryType type )
{
String source = "Logger";
String log = "Application";
if (!EventLog.SourceExists( source ))
{
EventLog.CreateEventSource( source, log );
}
EventLog eLog = new EventLog();
eLog.Source = source;
eLog.WriteEntry( Message, type );
}
}
}
现在,当我在启动服务后检查事件查看器时,它会显示以下两个事件:
这个SuperService已经开始了!
服务已成功启动。
所以它似乎有点工作,我看不到的是由timer1_Tick触发的事件。有谁知道为什么或能指出我正确的方向吗?提前谢谢。
答案 0 :(得分:1)
另外,使用topshelf可以更轻松地使用Windows服务。开源项目,允许您将服务编写为控制台应用程序/ POCO,但从“服务容器”中获取安装/卸载/调试支持,该服务容器抽象出所有粘合剂。
myservice (to run as console app for debugging)
myservice /install
myservice /uninstall
myservice /instance:{instance_name}
答案 1 :(得分:1)
您是否使用System.Threading.Timer而不是System.Windows.Forms.Timer? 您使用的教程的链接包含具有相同问题的用户的注释,并成功切换到System.Threading.Timer
了解更多信息(摘自您的链接): Problem with System.Timers.Timer not firing in a Windows service
答案 2 :(得分:0)
编辑:这是一个SO答案,涵盖了我在下面写的内容。
Windows Service Stops Automatically
我相信Windows会在“认为”该服务无关的情况下停止服务。我不记得这样做的确切基础“API”。几年前我和它一起战斗过。
你的事件日志中是否有一些措辞:“我的服务没什么可做的。终止。”或者是一些传达这种措辞的消息?