记录一下,防止忘记了
- 新建一个控制台应用程序 我用的是Framework4.5
- 引用包
- 直接上代码了, 该引用的进行引用。代码里有2个触发时间,具体的可以直接百度。
- 有个具体实现的方法是 TestJob
- 有个记录日志的文件是log。 如果日志文件访问被拒绝,可以手动建log文件,然后给上完全控制的权限就完事了。
- 编译之后会生成一个exe文件
cd到盘符 安装时以管理员身份运行CMD,进入程序目录。
xxxx.exe install topshelf
最后开启文件
public class TestJob : IJob {
public void Execute(IJobExecutionContext context) {
RequestHeatValue(); //具体的实现方法在这里执行
}
/// <summary>
/// 日志
/// </summary>
/// <param name="msg"></param>
public void log(string msg) {
string path = "C:\\weatherlog.txt";
FileStream fs = new FileStream(path, FileMode.Append);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(DateTime.Now.ToString() + " " + msg);
sw.Close();
fs.Close();
}
}
class Program {
static void Main(string[] args) {
HostFactory.Run(x => {
x.Service<MyJob>(s => {
s.ConstructUsing(name => new MyJob());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
x.RunAsLocalSystem();
x.SetDescription("数据中台--供热量");
x.SetDisplayName("数据中台--供热量");
x.SetServiceName("数据中台--供热量");
});
}
public class MyJob {
private IScheduler scheduler;
public MyJob() {
//初始化相关配置
//调度器工厂
ISchedulerFactory factory = new StdSchedulerFactory();
//调度器
scheduler = factory.GetScheduler();
scheduler.GetJobGroupNames();
/*-------------计划任务代码实现------------------*/
//创建任务
IJobDetail job = JobBuilder.Create<TestJob>().Build();
//创建触发器
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("TimeTrigger", "TimeGroup")
.StartNow() //现在开始
.WithSimpleSchedule(t => t.WithIntervalInHours(3) //触发时间
.RepeatForever() //不间断重复执行
).Build();
ITrigger trigger2 = TriggerBuilder.Create()
.WithIdentity("TimeTrigger", "TimeGroup")
.StartNow() //现在开始
.WithCronSchedule("0 15 5 * * ?") //时间表达式,每天 5:15点
.Build();
//添加任务及触发器至调度器中
scheduler.ScheduleJob(job, trigger);
/*-------------计划任务代码实现------------------*/
}
public void Start() {
//启动服务
scheduler.Start();
}
public void Stop() {
//关闭服务
scheduler.Shutdown();
}
}
}
这里用到2个必须的包 我用的版本是Quartz 版本 2.4 Topshelf版本 3.3。还有个是pgsql数据库的包
这个图是开启控制台服务,install。卸载是uninstall
右键开启服务!~