c# 4.8 实现Windows 定时任务计划(Task Scheduler)
分享一个我自己写的 Windows 定时任务计划(Task Scheduler) 动态创建代码,没做太多封装,留个实现笔记
首先封装一个简单配置项的类

1 public class TaskSchedulerConfig
2 {
3 /// <summary>
4 /// 引用程序路径
5 /// </summary>
6 public string ApplicationPath { get; set; }
7 /// <summary>
8 /// 引用程序参数
9 /// </summary>
10 //public string ApplicationParameter { get; set; }
11 /// <summary>
12 /// 任务名称
13 /// </summary>
14 public string TaskName { get; set; }
15 /// <summary>
16 /// 任务说明
17 /// </summary>
18 public string TaskDescription { get; set; }
19 /// <summary>
20 /// 任务执行周期 0 每日执行 1 每周执行 2 每月执行
21 /// </summary>
22 public int TaskExecutionCycle { get; set; }
23 /// <summary>
24 /// 开始执行时间范围 yyyy/MM/dd HH:mm:ss
25 /// </summary>
26 public DateTime StartBoundary { get; set; }
27 /// <summary>
28 /// 每月的第几号执行
29 /// </summary>
30 public int DaysOfMonth { get; set; }
31 /// <summary>
32 /// 每周的周几执行
33 /// </summary>
34 public int DaysOfWeek { get; set; }
35
36
37 }

1 /// <summary>
2 /// 根据数字1-7来设置周一 - 周日
3 /// </summary>
4 /// <param name="num"></param>
5 /// <returns></returns>
6 static DaysOfTheWeek GetDaysOfTheWeek(int num)
7 {
8 switch (num)
9 {
10 case 1:
11 return DaysOfTheWeek.Monday;
12 case 2:
13 return DaysOfTheWeek.Tuesday;
14 case 3:
15 return DaysOfTheWeek.Wednesday;
16 case 4:
17 return DaysOfTheWeek.Thursday;
18 case 5:
19 return DaysOfTheWeek.Friday;
20 case 6:
21 return DaysOfTheWeek.Saturday;
22 case 7:
23 return DaysOfTheWeek.Sunday;
24 default:
25 throw new ArgumentException("无效的数字。请提供1到7之间的数字。");
26 }
27 }
28 /// <summary>
29 /// 限定每月只能在1-28号之间执行任务
30 /// </summary>
31 /// <param name="num"></param>
32 /// <returns></returns>
33 static int GetDaysOfMonth(int num)
34 {
35 if (num < 1 || num > 28)
36 {
37 throw new ArgumentException("无效的数字。请提供1到28之间的数字。");
38 }
39 return num;
40 }
两个范围判定的方法

1 static void Main(string[] args)
2 {
3
4 TaskSchedulerConfig taskSchedulerConfig;
5 try
6 {
7 var taskSchedulerConfigJson = args[0];
8 taskSchedulerConfig = JsonConvert.DeserializeObject<TaskSchedulerConfig>(taskSchedulerConfigJson);
9 }
10 catch
11 {
12 string demo = @"{
13 ""ApplicationPath"": ""C:\\YourApplication\\YourExecutable.exe"",
14 ""TaskName"": ""DailyTask"",
15 ""TaskDescription"": ""This is a daily task"",
16 ""TaskExecutionCycle"": 0,
17 ""StartBoundary"": ""2024/02/28 08:00:00"",
18 ""DaysOfMonth"": 28,
19 ""DaysOfWeek"": 3
20 }";
21
22 Console.WriteLine($"参数错误,正确示例:{demo}");
23 return;
24 }
25
26
27 try
28 {
29 using (TaskService taskService = new TaskService())
30 {
31 // 创建一个新任务
32 TaskDefinition taskDefinition = taskService.NewTask();
33 taskDefinition.Principal.UserId = "SYSTEM"; // 设置为SYSTEM以在系统级别运行
34 // 设置任务的基本信息
35 taskDefinition.RegistrationInfo.Description = taskSchedulerConfig.TaskDescription;
36
37 switch (taskSchedulerConfig.TaskExecutionCycle)
38 {
39 case 0:
40 DailyTrigger dailyTrigger = new DailyTrigger();
41 dailyTrigger.StartBoundary = taskSchedulerConfig.StartBoundary;
42 dailyTrigger.DaysInterval = 1; // 每天执行
43 taskDefinition.Triggers.Add(dailyTrigger);
44 break;
45 case 1:
46 WeeklyTrigger weeklyTrigger = new WeeklyTrigger();
47 weeklyTrigger.StartBoundary = taskSchedulerConfig.StartBoundary;
48 weeklyTrigger.DaysOfWeek = GetDaysOfTheWeek(taskSchedulerConfig.DaysOfWeek);
49 weeklyTrigger.WeeksInterval = 1; // 每隔1周执行
50 taskDefinition.Triggers.Add(weeklyTrigger);
51 break;
52 case 2:
53 MonthlyTrigger monthlyTrigger = new MonthlyTrigger();
54 monthlyTrigger.StartBoundary = taskSchedulerConfig.StartBoundary;
55 monthlyTrigger.DaysOfMonth = new[] { GetDaysOfMonth(taskSchedulerConfig.DaysOfMonth) };
56 monthlyTrigger.MonthsOfYear = MonthsOfTheYear.AllMonths; // 每个月执行
57 taskDefinition.Triggers.Add(monthlyTrigger);
58 break;
59 default:
60 Console.WriteLine("任务执行周期参数错误!正确示例:0 每日执行 1 每周执行 2 每月执行");
61 break;
62 }
63
64
65
66 // 设置要执行的程序路径
67 taskDefinition.Actions.Add(new ExecAction(taskSchedulerConfig.ApplicationPath, null, null));
68
69 // 将任务注册到 Windows 任务计划程序
70 taskService.RootFolder.RegisterTaskDefinition(taskSchedulerConfig.TaskName, taskDefinition);
71 Console.WriteLine("任务计划创建成功!");
72 }
73 }
74 catch (Exception ex)
75 {
76 Console.WriteLine($"创建{taskSchedulerConfig.TaskName} 任务错误,错误原因是:{ex.Message}");
77 }
78
79
80 }
Main
c# 4.8 实现Windows 定时任务计划(Task Scheduler)的更多相关文章
- windows 定时任务:schtasks,定时关闭网易云音乐
大部分属于转载和粘贴. 使用命令:schtasks windows 定时任务 使用样例: 每天定时关闭网易云音乐: 每天22:20关闭网易云音乐: schtasks /create /tn &qu ...
- Windows下计划任务的使用
0x01 前言 在渗透测试中,尤其是域渗透,常常会用到Windows系统的计划任务,一是用于远程启动程序,二是用于程序的自启动 那么,计划任务具体有哪些使用技巧呢?是否对权限有要求?一定需要管理员权限 ...
- 在Windows Server 2012的Task Scheduler里面配置自动发送邮件
最近在一台server上配置了每个周末备份数据库的定时任务,想顺手配置发送备份完成的邮件提醒我去Double Check一下备份结果. 悲剧地发现Send an email功能被新版的server给禁 ...
- Windows任务计划
任务计划,可以将任何脚本.程序或文档安排在某个时间运行.“任务计划”在每次启动windows系统的时候自动启动(默认Task Scheduler服务是开启的)并在后台运行.使用“任务计划”可以完成以下 ...
- 使用C#创建计划任务(How to create a Task Scheduler use C# )
本文主要讲解了如何使用C#来创建windows计划任务. 需求:在不定时间段运行多个后台程序(winfrom,wpf,console,等等)用于更新数据. 问题:为什么要使用计划任务,而不直接在程序 ...
- Windows任务计划程序起始于参数自动修改
Windows任务计划程序建立后,手工运行可以成功,但计划任务自动运行却不能成功,搜索网络,原来是起始于参数没有配置,这个参数的英文名字是start-in.它保证任务计划程序的WorkingDirec ...
- 在WINDOWS任务计划程序下执行PHP文件 PHP定时功能的实现
最近需要做一个定时任务功能,从网站找了很多相关的代码,windows实现方法综合起来大概就两种, 一.使用PHP ignore_user_abort 函数 即使关掉浏览器也能正常运行:(个人感觉PHP ...
- windows 定时任务 - 定时关机
添加定时关机,刚好可以利用windows定时任务 [开始]->[控制面板]->[任务计划]->[添加任务计划] 1.找到 shutdown.exe 设置每天执行 2.设置晚上10点 ...
- [经验分享]C# 操作Windows系统计划任务
背景:我做了一个事情是要自己提前创建好很多要定时执行的任务,在我不在的时候自动执行这些程序,以保证我的工作能无人值守,那么我就需要建立系统计划任务来帮我完成这件事情,当然用脑子想想如何实现,很简单,每 ...
- .NET创建Windows定时任务
创建Windows定时任务教程 1.创建一个控制台应用程序,保证程序正常运行. 2.右键点击我的电脑->点击管理. 3.在计算机管理弹出框->展开计算机管理(本地)->展开系统工具- ...
随机推荐
- [转帖]认识目标文件的格式——a.out COFF PE ELF
https://cloud.tencent.com/developer/article/1446849 1.目标文件的常用格式 目标文件是源代码编译后未进行链接的中间文件(Windows的.obj ...
- Ant Design Vue数字输入框InputNumber 有值但是验证却不能够通过
InputNumber 有值但是验证却不能够通过 今天遇见这样一个问题,InputNumber 输入框中有值 但是却却提示验证不能够通过 后来经过分析,怀疑是数据类型不正确, 后面经过验证,果然是数据 ...
- 【发现一个问题】extjs-gpl-7.0: 当修改 store 对象的字段后,再次 loadPage() 后字段映射错误。
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 因为查询中需要每次返回数目不确定的 fields ,这就需 ...
- 关于Curl命令的使用
最常用的curl命令 1.发送GET请求 curl URL 例: curl URL?a=1&b=nihao 2.发送POST请求 curl -X POST -d 'a=1&b=niha ...
- KPlayer无人直播
KPlayer文档 其实就看这个教程就可以了: KPlayer文档 启动阿里云或者腾讯云的服务器进行这个步骤 服务器的购买链接: 腾讯云618 夏日盛惠_腾讯云年中优惠活动-腾讯云 域名特惠活动_域名 ...
- 人工智能自然语言处理:N-gram和TF-IDF模型详解
人工智能自然语言处理:N-gram和TF-IDF模型详解 1.N-gram 模型 N-Gram 是一种基于统计语言模型的算法.它的基本思想是将文本里面的内容按照字节进行大小为 N 的滑动窗口操作,形成 ...
- 强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解
强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法.双延迟深度确定性策略梯度TD3算法详解 1.核心词汇 深度确定性策略梯度(deep deterministic po ...
- 《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(1)-初识Wireshark
1.简介 前边已经介绍过两款抓包工具,应该是够用了,也能够处理在日常工作中遇到的问题了,但是还是有人留言让宏哥要讲解讲解Wireshark这一款抓包工具,说实话宏哥之前也没有用过这款工具,只能边研究边 ...
- P8659 [蓝桥杯 2017 国 A] 数组操作 题解
题目链接:洛谷 或者 蓝桥杯 或者 C语言中文网 几个OJ的AC记录: 忘了哪个OJ的: 洛谷: C语言中文网: 蓝桥杯: emmmmmmm,好像每个OJ给的时限和空间还不一样,蓝桥杯官方还给了 $3 ...
- git~issue在github/gitlab中的使用
本文档适用于github和gitlab issue介绍 GitHub 中的 issue 功能是一种用于跟踪项目中任务.缺陷.功能请求和讨论的工具.通过 issue,项目成员可以提出问题.报告 bug. ...