zoukankan      html  css  js  c++  java
  • C# 通过 Quartz .NET 实现Timer Job并将其注册成为Windows Service

    之前的一篇文章讲述了如何通过 Quartz .NET 实现 Timer Job (http://www.cnblogs.com/mingmingruyuedlut/p/8037263.html)

    在此基础上如何将实现的Timer Job注册成为Windows Service,请看如下步骤:

    1):在VS中创建Windows Service的工程

    2):继承 IJob 接口实现对文本文件的写值

    using Quartz;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace QuartzTimerWinSerApp
    {
        public class EricSimpleJob : IJob
        {
            public Task Execute(IJobExecutionContext context)
            {
                string filepath = @"C:	imertest.txt";
    
                if (!File.Exists(filepath))
                {
                    using (FileStream fs = File.Create(filepath)) { }
                }
    
                using (StreamWriter sw = new StreamWriter(filepath, true))
                {
                    sw.WriteLine(DateTime.Now.ToLongTimeString());
                }
    
                return Task.CompletedTask;
            }
        }
    }

    3):完成 IScheduler, IJobDetail 和 ITrigger 的相关配置

    using Quartz;
    using Quartz.Impl;
    using System;
    using System.Collections.Generic;
    using System.Collections.Specialized;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace QuartzTimerWinSerApp
    {
        public class JobScheduler
        {
            public async void Start()
            {
                var props = new NameValueCollection
                {
                    { "quartz.serializer.type", "binary" }
                };
                StdSchedulerFactory schedFact = new StdSchedulerFactory(props);
    
                IScheduler sched = await schedFact.GetScheduler();
                await sched.Start();
    
                IJobDetail job = JobBuilder.Create<EricSimpleJob>()
                    .WithIdentity("EricJob", "EricGroup")
                    .Build();
    
                ITrigger trigger = TriggerBuilder.Create()
                    .WithIdentity("EricTrigger", "EricGroup")
                    .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever())
                    .Build();
    
                await sched.ScheduleJob(job, trigger);
            }
    
            public async void Stop()
            {
                IScheduler sched = await StdSchedulerFactory.GetDefaultScheduler();
                await sched.Shutdown();
            }
        }
    }

    4):完成工程中Service1的处理

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.Linq;
    using System.ServiceProcess;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace QuartzTimerWinSerApp
    {
        public partial class Service1 : ServiceBase
        {
            JobScheduler scheduler;
            public Service1()
            {
                InitializeComponent();
            }
    
            protected override void OnStart(string[] args)
            {
                scheduler = new JobScheduler();
                scheduler.Start();
            }
    
            protected override void OnStop()
            {
                if (scheduler != null)
                    scheduler.Stop();
            }
        }
    }

    5):完成Program.cs中Main函数的处理

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.ServiceProcess;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace QuartzTimerWinSerApp
    {
        static class Program
        {
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            static void Main()
            {
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[]
                {
                    new Service1()
                };
                ServiceBase.Run(ServicesToRun);
            }
        }
    }

    6):完成上述代码之后,build出来的exe执行文件,放到指定的目录中,然后用 .Net Framework 中的 InstallUtil.exe 完成对service的注册 (例如InstallUtil.exe为目录为:C:WindowsMicrosoft.NETFramework64v4.0.30319),命令行为: InstallUtil.exe ‘your .exe file path’,注:要以管理员的身份运行cmd

    如果想要卸载对应的服务,那么对应的命令行为:InstallUtil.exe  /u  C:CustomerWinService....exe

    7): 到Service管理界面找到刚刚安装上的Service,然后右键启动,之后就可以到对应的txt文件中看到 Timer Job 所写入的内容

    更多相关内容请参考如下链接:

    http://www.codingdefined.com/2016/08/schedule-tasks-as-windows-service-using.html

    http://www.c-sharpcorner.com/UploadFile/8f2b4a/how-to-installuninstall-net-windows-service-C-Sharp/

  • 相关阅读:
    总结php删除html标签和标签内的内容的方法
    php正则验证手机、邮箱
    php正则匹配到字符串里面的a标签
    PHP 使用try catch,捕获异常
    Apache漏洞利用与安全加固实例分析
    php json接口demo
    PHP 把MYSQL重复ID 二维数组重组为三维数组
    文件扩展关联命令(assoc)
    修改文件属性(attrib)
    文件比较命令(fc)
  • 原文地址:https://www.cnblogs.com/mingmingruyuedlut/p/9033159.html
Copyright © 2011-2022 走看看