C# 通过 Quartz .NET 实现Timer Job并将其注册成为Windows Service

时间:2023-03-10 02:23:39
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的工程

C# 通过 Quartz .NET 实现Timer Job并将其注册成为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:\timertest.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().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:\Windows\Microsoft.NET\Framework64\v4.0.30319),命令行为: InstallUtil.exe ‘your .exe file path’,注:要以管理员的身份运行cmd

C# 通过 Quartz .NET 实现Timer Job并将其注册成为Windows Service

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

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

C# 通过 Quartz .NET 实现Timer Job并将其注册成为Windows Service

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

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/