坚持实施Windows服务

时间:2010-08-19 20:40:27

标签: c# windows visual-studio windows-services

嘿伙计们,我已经在线阅读了一些有关创建和安装Windows服务的教程,并且似乎不断陷入困境。我遵循了教程here,虽然它似乎正在起作用,但它不是100%。这是我使用的代码:

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触发的事件。有谁知道为什么或能指出我正确的方向吗?提前谢谢。

3 个答案:

答案 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”。几年前我和它一起战斗过。


你的事件日志中是否有一些措辞:“我的服务没什么可做的。终止。”或者是一些传达这种措辞的消息?