代码之家  ›  专栏  ›  技术社区  ›  Joey

坚持执行Windows服务

  •  0
  • Joey  · 技术社区  · 14 年前

    嘿,伙计们,我在网上学习了一些关于创建和安装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 );
        }
    }
    }
    

    现在,当我在启动服务后检查事件查看器时,它显示以下两个事件:

    此超级服务已启动!

    服务已成功启动。

    所以它似乎在某种程度上起作用,我看不到的是由时间触发的事件。有人知道为什么或者能给我指明正确的方向吗?事先谢谢。

    3 回复  |  直到 10 年前
        1
  •  1
  •   aledpardo Purple Hexagon    10 年前

    是否使用System.Threading.Timer而不是System.Windows.Forms.Timer? 您使用的教程链接中有关于用户有相同问题的注释,并成功切换到System.Threading.Timer。

    有关详细信息(从链接中获取): Problem with System.Timers.Timer not firing in a Windows service .

        2
  •  1
  •   Rob    14 年前

    顺便说一下,Windows服务更容易 topshelf . 开放源代码项目,允许您将服务编写为控制台应用程序/poco,但从一个“服务容器”中获取安装/卸载/调试支持,该容器抽象了所有胶水。

    myservice                                  (to run as console app for debugging)
    myservice /install
    myservice /uninstall
    myservice /instance:{instance_name}
    
        3
  •  0
  •   Community Mr_and_Mrs_D    7 年前

    编辑: 下面是一个关于我写的东西的答案。

    Windows Service Stops Automatically


    我相信如果Windows“认为”服务与之无关,它会停止服务。我记不清到底是什么“api”实现了这一点。几年前我就用它战斗过。


    您的事件日志中是否有这样的内容:“myservice不需要做任何事情”。或者是一些传达这句话的信息?