如何使用C#快速创建定时任务

原文链接:https://www.cnblogs.com/zhaotianff/p/17511040.html

使用Windows的计划任务功能可以创建定时任务。

使用schtasks.exe可以对计划任务进行管理,而不需要编写额外代码

这里掌握schtasks /CREATE 的几个核心参数就可以快速创建计划任务

/SC   

计划频率(schedule)

必须是以下值

MINUTE:每分钟

HOURLY:每小时

DAILY:每天

WEEKLY:每周

MONTHLY:每月

ONCE:一次

ONSTART:计算机启动时

ONLOGON:用户登录时

ONIDLE:当计算机空闲时

ONEVENT:当特定事件被记录时

 /TN 

任务名称(taskname)

以路径\名称形式指定
任务名称。如 MyTaskFolder\MyTask

 

/ST

任务的开始时间(starttime)
时间格式为 HH:mm (24 小时时间),例如 14:30 表示
2:30 PM。如果未指定 /ST,则默认值为
当前时间
 

/TR 

任务程序的路径(taskrun)
例如: C:\windows\system32\notepad.exe

如果程序有参数,空格然后加在程序路径后即可

例如: C:\windows\system32\notepad.exe a.txt

 

/D

运行任务的日期(days)

当SC是WEEKLY时:

可选MON、TUE、WED、THU、FRI、SAT、SUN


当SC是MONTHLY时:

可选 1 - 31

通配符“*”指定所有日期。

/M 

指定一年内的某月(months) 。默认是该月的第一天。

可选:

JAN、FEB、MAR、APR、MAY、JUN、
JUL、 AUG、SEP、OCT、NOV 和 DEC。

通配符"*"代表所有月份

示例:

创建一个名为MyTask1的计划任务,位于MyTaskFolder文件夹下,该任务在每天的12:00执行 "notepad.exe test.txt"

1 schtasks /create /SC DAILY  /TN "MyTaskFolder\MyTask1" /ST "12:00" /TR "C:\Windows\System32\notepad.exe test.txt"

创建一个名为MyTask1的计划任务,位于MyTaskFolder文件夹下,该任务在每周一的12:00执行 "notepad.exe test.txt"

1 schtasks /create /SC WEEKLY /D MON /TN "MyTaskFolder\MyTask2" /ST "12:00" /TR "C:\Windows\System32\notepad.exe test.txt"

创建一个名为MyTask1的计划任务,位于MyTaskFolder文件夹下,该任务在每个月15号的12:00执行 "notepad.exe test.txt"

1 schtasks /create /SC MONTHLY /M * /D 15 /TN "MyTaskFolder\MyTask3" /ST "12:00" /TR "C:\Windows\System32\notepad.exe test.txt"

在C#中调用使用Process类执行上面命令即可。可以参考以下的代码

因为月份这里我需要每个月,所以就没定义月份枚举了,只定义了每周的枚举。

WeekDay.cs

天的枚举

 1    public enum WeekDay2     {3         MON,4         TUE,5         WED,6         THU,7         FRI,8         SAT,9         SUN
10     }

TaskSchedulerManager.cs

对计划任务进行一个简单的创建管理,可以根据自己需求进行修改。

   public class TaskSchedulerManager{private const string SCHTASKS = "schtasks.exe";public static bool IsExistTask(string taskName){var result = ProcessHelper.GetConsoleOutput(SCHTASKS,"/query");return result.Contains(taskName);}public static bool CreateDailyTask(string taskName,string exePath,string args,string time){if (IsExistTask(taskName))return true;var taskArgs = $"/create /SC DAILY  /TN \"{taskName}\" /ST \"{time}\" /TR \"{exePath} {args}\"";var result = ProcessHelper.GetConsoleOutput(SCHTASKS, taskArgs);return result.Contains(taskName);}public static bool CreateWeeklyTask(string taskName,string exePath,string args, string time, WeekDay weekDay){if (IsExistTask(taskName))return true;var taskArgs = $"/create /SC WEEKLY /D {weekDay} /TN \"{taskName}\" /ST \"{time}\" /TR \"{exePath} {args}\"";var result = ProcessHelper.GetConsoleOutput(SCHTASKS, taskArgs);return result.Contains(taskName);}public static bool CreateMonthlyTask(string taskName, string exePath, string args, string time, int monthDay){if (IsExistTask(taskName))return true;var taskArgs = $"/create /SC MONTHLY /M * /D {monthDay} /TN \"{taskName}\" /ST \"{time}\" /TR \"{exePath} {args}\"";var result = ProcessHelper.GetConsoleOutput(SCHTASKS, taskArgs);return result.Contains(taskName);}}

ProcessHelper.cs

这个方法是获取控制台的输出

  public class ProcessHelper{public static string GetConsoleOutput(string cmd,string args = ""){var output = "";Process process = new Process();ProcessStartInfo psInfo = new ProcessStartInfo();psInfo.Arguments = args;psInfo.FileName = cmd;psInfo.UseShellExecute = false;psInfo.RedirectStandardOutput = true;psInfo.CreateNoWindow = false;process.StartInfo = psInfo;process.OutputDataReceived += (a, b) => { output += b.Data; };process.Start();process.BeginOutputReadLine();process.WaitForExit();process.Close();process.Dispose();return output;}}

如果需要编程进行控制的,可以使用CLSID_TaskScheduler的COM接口

觉得麻烦不想自己封装的,可以直接使用nuget包

NuGet\Install-Package TaskScheduler -Version 2.10.1

另外:

删除任务可以使用下面的命令

1 schtasks /delete /TN {taskName} /F

参考文档:

schtasks commands | Microsoft Learn    schtasks.exe使用说明

https://learn.microsoft.com/en-us/windows/win32/taskschd/task-scheduler-start-page        TaskScheduler API

pinvoke.net:ITaskScheduler (Interfaces)               C# TaskSchduler COM API

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/49004.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文总结:A Survey on Evaluation of Large Language Models-鲁棒性相关内容

A Survey on Evaluation of Large Language Models 只取了鲁棒性相关的内容 LLMs:《A Survey on Evaluation of Large Language Models大型语言模型评估综述》理解智能本质(具备推理能力)、AI评估的重要性(识别当前算法的局限性设 3.2.1 Robustness鲁棒性&#xf…

Gitlab以及分支管理

一、概述 Git 是一个分布式版本控制系统,用于跟踪文件的变化,尤其是源代码的变化。它由 Linus Torvalds 于 2005 年开发,旨在帮助管理大型软件项目的开发过程。 二、Git 的功能特性 Git 是关注于文件数据整体的变化,直接会将文件…

HTTP模块(二)

HTTP 设置 HTTP 响应报文 HTTP报文常见属性: const http require(http);const server http.createServer((request, response) > {// 设置请求状态码 2xx 4xx 5xxresponse.statusCode 200;// 设置请求描述 了解即可response.statusMessage hello// 指定响…

谷粒商城实战笔记-59-商品服务-API-品牌管理-使用逆向工程的前后端代码

文章目录 一, 使用逆向工程生成的代码二,生成品牌管理菜单三,几个小问题 在本次的技术实践中,我们利用逆向工程的方法成功地为后台管理系统增加了品牌管理功能。这种开发方式不仅能快速地构建起功能模块,还能在一定程度…

uni-app声生命周期

应用的生命周期函数在App.vue页面 onLaunch:当uni-app初始化完成时触发(全局触发一次) onShow:当uni-app启动,或从后台进入前台时显示 onHide:当uni-app从前台进入后台 onError:当uni-app报错时触发,异常信息为err 页面的生命周期 onLoad…

Linux-安装VMware-01

一、认识linux Linux 是一个开源的类 Unix 操作系统,由林纳斯托瓦兹(Linus Torvalds)于1991年首次发布。Linux 是许多计算机硬件的底层操作系统,特别是服务器、嵌入式系统和个人电脑。它支持多种架构,包括 x86、x64、A…

算法学习笔记(8.8)-多重背包

目录 Question: 思路解析: 代码示例 多重背包的优化问题: 1.二进制优化 代码示例: 2.单调队列优化(滑动窗口) 代码示例 Question: 4. 多重背包问题 I - AcWing题库https://www.acwing.com/problem/content/description/4/ 多重背包简单来说其…

eqmx上读取数据处理以后添加到数据库中

目录 定义一些静态变量 定时器事件的处理器 订阅数据的执行器 处理json格式数据和将处理好的数据添加到数据库中 要求和最终效果 总结一下 定义一些静态变量 // 在这里都定义成全局的 一般都定义成静态的private static MqttClient mqttClient; // mqtt客户端 private s…

springboo 整合 redis

springBoot 整合 redis starter启动依赖。—包含自动装配类—完成相应的装配功能。 引入依赖 <!--引入了redis整合springboot 的依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis&…

基于opencv[python]的人脸检测

1 图片爬虫 这里的代码转载自&#xff1a;http://t.csdnimg.cn/T4R4F # 获取图片数据 import os.path import fake_useragent import requests from lxml import etree# UA伪装 head {"User-Agent": fake_useragent.UserAgent().random}pic_name 0 def request_pic…

谷粒商城实战笔记-65-商品服务-API-品牌管理-表单校验自定义校验器

文章目录 1&#xff0c;el-form品牌logo图片自定义显示2&#xff0c;重新导入和注册element-ui组件3&#xff0c;修改brand-add-or-update.vue控件的表单校验规则firstLetter 校验规则sort 校验规则 1&#xff0c;el-form品牌logo图片自定义显示 为了在品牌列表中自定义显示品…

Typora 以 Github 作为图床使用 PicGo 上传图片

本文简练快速介绍如标题所述的操作流程 文章目录 1.前言1.1 图床简述1.2 Github图床的优缺点1.2.1 优点1.2.2 缺点 2.下载PicGo3.Github访问加速4.用github创建图床服务器4.1 注册4.2 创建仓库 4.3 生成TOKEN令牌5.设置PicGo6.设置Typora7.完成 1.前言 1.1 图床简述 图床&…

人工智能背后的图灵测试(TuringTest)是什么?

人工智能背后的图灵测试(TuringTest)是什么&#xff1f; 一、什么是图灵测试 图灵测试&#xff08;Turing Test&#xff09;由英国数学家和计算机科学家阿兰图灵&#xff08;Alan Turing&#xff09;在1950年提出&#xff0c;用以判断机器是否具有人类智能。图灵在其论文《计…

3.1、数据结构-线性表

数据结构 数据结构线性结构线性表顺序存储和链式存储区别单链表的插入和删除练习题 栈和队列练习题 串&#xff08;了解&#xff09; 数据结构 数据结构该章节非常重要&#xff0c;上午每年都会考10-12分选择题下午一个大题 什么叫数据结构&#xff1f;我们首先来理解一下什…

【Android】碎片—动态添加、创建Fragment生命周期、通信

简单用法 在一个活动中添加两个碎片&#xff0c;并让这两个碎片平分活动空间 先新建一个左侧碎片布局和一个右侧碎片布局 左侧碎片 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/…

Unity Android接入SDK 遇到的问题

1. buildtools、platformtools、commandline tools 以及compiled sdk version、buildtools sdk version、target sdk version 的说明 Android targetSdkVersion了解一下 - 简书 2. 查看.class 和.jar文件 jd_gui 官网地址&#xff1a; 下载jd_gui 工具 &#xff0c;或者 idea 下…

ITK-均值滤波

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 均值滤波原理 均值滤波是一种常用的图像平滑技术&#xff0c;用于减少图像中的噪声。其基本原理是通过计算图像中每个像素及其邻…

linux ftp操作记录

一.ftp 创建用户 passwd: user ftpuser does not exist 如果你遇到 passwd: user ftpuser does not exist 的错误&#xff0c;这意味着系统中不存在名为 ftpuser 的用户。你需要首先确认FTP用户是否是系统用户&#xff0c;还是FTP服务器软件&#xff08;如Pure-FTPd&#xff…

【React】通过实际示例详解评论列表渲染和删除

文章目录 一、引言二、初始状态与状态更新1. 使用useState钩子管理状态2. 评论列表的初始数据 三、列表渲染的实现1. list.map(item > { ... })2. return 语句3. JSX 语法4. 为什么这样设计5. 完整解读 四、列表项的唯一标识1. key 的作用2. key 的用法3. 可以没有 key 吗&a…

【Stable Diffusion】(基础篇五)—— 使用SD提升分辨率

使用SD提升分辨率 本系列博客笔记主要参考B站nenly同学的视频教程&#xff0c;传送门&#xff1a;B站第一套系统的AI绘画课&#xff01;零基础学会Stable Diffusion&#xff0c;这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili 在前期作画的…