使用C#自动创建windows任务计划程序,并使用微软API文档教程

微软自带的库

csharp 复制代码
Microsoft.Win32.TaskScheduler

根据微软提供的API文档去编写我们所需要的功能

csharp 复制代码
https://learn.microsoft.com/zh-cn/windows/win32/taskschd/taskdefinition

结果代码。

csharp 复制代码
using (TaskService ts = new TaskService())
{
    // 创建新的任务定义
    TaskDefinition td = ts.NewTask();
    //创建任务信息
    //创建任务描述
    td.RegistrationInfo.Description = "这里是一个任务的描述";


    //设置任务安全选项
    //设置用户名,获取使用当前系统登录的用户名,同时我们可以在电脑总自定义选择我们所需要指定的账户,通常情况下都使用默认系统账户最佳
    td.Principal.UserId = WindowsIdentity.GetCurrent().Name;
    //设置只在用户登陆时运行
    td.Principal.LogonType = TaskLogonType.InteractiveToken;
    //设置使用最高权限
    td.Principal.RunLevel = TaskRunLevel.Highest;


    // 设置任务为隐藏
    td.Settings.Hidden = true;

    //设置触发器
    //创建我们需要的触发器对象
    LogonTrigger trigger = new LogonTrigger();
    //设置指定触发用户
    trigger.UserId = WindowsIdentity.GetCurrent().Name;
    //设置延迟任务时间
    trigger.Delay = TimeSpan.FromMinutes(1);
    //设置重复时间的持续时间
    trigger.Repetition.Duration = TimeSpan.FromMinutes(100);
    //设置重复时间间隔
    trigger.Repetition.Interval = TimeSpan.FromMinutes(5);
    //设置是否在持续时间结束时停止所有运行任务
    trigger.Repetition.StopAtDurationEnd = true;
    //设置任务运行时间超过指定值时停止运行
    trigger.ExecutionTimeLimit = TimeSpan.FromDays(100);
    //设置激活时间
    trigger.StartBoundary = new DateTime(2024,9,10,12,00,00);
    //设置到期时间
    trigger.EndBoundary = new DateTime(2025, 9, 10, 12, 00, 00);
    //设置触发器是否启用
    trigger.Enabled = true;
    //将设置好的触发器添加到队列中
    td.Triggers.Add(trigger);

    //创建操作任务,由于通常情况下我们都是执行一个可执行文件即可,所以添加参数,和地址都为null
    ExecAction execAction = new ExecAction();
    //设置操作任务的执行路径
    execAction.Path = "C:\\DateTimeLock\\DateTimeLock.exe";
    //设置添加参数
    execAction.Arguments =null;
    //设置起始于的地址
    execAction.WorkingDirectory = null;
    //将操作添加到方法中
    td.Actions.Add(execAction);

    //仅当计算机处于空闲状态时,任务计划程序才会运行任务,由于最新的API取消了对等待时间的支持,所不再演示
    td.Settings.RunOnlyIfIdle = true;
    //设置如何计算机不再空闲状态则停止运行
    td.Settings.IdleSettings.StopOnIdleEnd = true;
    //设置当计算机空闲状态继续时重启启动任务
    td.Settings.IdleSettings.RestartOnIdle = true;
    //如果计算机开始使用电池供电时任务将停止。
    td.Settings.StopIfGoingOnBatteries = true;
    //当任务被启动时唤醒计算机
    td.Settings.WakeToRun = true;
    //任务计划程序将仅在网络可用时运行任务
    td.Settings.RunOnlyIfNetworkAvailable = true;
    //任务计划程序将仅在网络名字为指定名字的时候才会执行
    td.Settings.NetworkSettings.Name = "网络 3";

    //如果过了计划开始时间,立即重启任务
    td.Settings.StartWhenAvailable = true;
    //如果任务执行失败,则按照1分钟的频率重启
    td.Settings.RestartInterval = TimeSpan.FromMinutes(1);
    //尝试重启任务次数为5次
    td.Settings.RestartCount = 5;
    //设置任务运行时间为30天,当设置为0时则为永久状态
    td.Settings.ExecutionTimeLimit = TimeSpan.FromDays(30);
    //如何任务没有计划再次运行,则指定时间后删除任务
    td.Settings.DeleteExpiredTaskAfter=TimeSpan.FromDays(1);
    //如果请求后任务还在运行,强行将其停止
    td.Settings.AllowHardTerminate = true;
    //设置如果任务运行则停止当前任务,重新执行任务实例
    td.Settings.MultipleInstances=TaskInstancesPolicy.StopExisting;
    
    // 注册任务
    ts.RootFolder.RegisterTaskDefinition("我的测试任务", td, TaskCreation.CreateOrUpdate, null, null, td.Principal.LogonType);
}

1.首页

csharp 复制代码
 //设置任务安全选项
    //设置用户名,获取使用当前系统登录的用户名,同时我们可以在电脑总自定义选择我们所需要指定的账户,通常情况下都使用默认系统账户最佳
    td.Principal.UserId = WindowsIdentity.GetCurrent().Name;
    //设置只在用户登陆时运行
    td.Principal.LogonType = TaskLogonType.InteractiveToken;
    //设置使用最高权限
    td.Principal.RunLevel = TaskRunLevel.Highest;


    // 设置任务为隐藏
    td.Settings.Hidden = true;

2.触发器

csharp 复制代码
//设置触发器
    //创建我们需要的触发器对象
    LogonTrigger trigger = new LogonTrigger();
    //设置指定触发用户
    trigger.UserId = WindowsIdentity.GetCurrent().Name;
    //设置延迟任务时间
    trigger.Delay = TimeSpan.FromMinutes(1);
    //设置重复时间的持续时间
    trigger.Repetition.Duration = TimeSpan.FromMinutes(100);
    //设置重复时间间隔
    trigger.Repetition.Interval = TimeSpan.FromMinutes(5);
    //设置是否在持续时间结束时停止所有运行任务
    trigger.Repetition.StopAtDurationEnd = true;
    //设置任务运行时间超过指定值时停止运行
    trigger.ExecutionTimeLimit = TimeSpan.FromDays(100);
    //设置激活时间
    trigger.StartBoundary = new DateTime(2024,9,10,12,00,00);
    //设置到期时间
    trigger.EndBoundary = new DateTime(2025, 9, 10, 12, 00, 00);
    //设置触发器是否启用
    trigger.Enabled = true;
    //将设置好的触发器添加到队列中
    td.Triggers.Add(trigger);

3.操作

csharp 复制代码
 //创建操作任务,由于通常情况下我们都是执行一个可执行文件即可,所以添加参数,和地址都为null
    ExecAction execAction = new ExecAction();
    //设置操作任务的执行路径
    execAction.Path = "C:\\DateTimeLock\\DateTimeLock.exe";
    //设置添加参数
    execAction.Arguments =null;
    //设置起始于的地址
    execAction.WorkingDirectory = null;
    //将操作添加到方法中
    td.Actions.Add(execAction);

4.条件

csharp 复制代码
//仅当计算机处于空闲状态时,任务计划程序才会运行任务,由于最新的API取消了对等待时间的支持,所不再演示
    td.Settings.RunOnlyIfIdle = true;
    //设置如何计算机不再空闲状态则停止运行
    td.Settings.IdleSettings.StopOnIdleEnd = true;
    //设置当计算机空闲状态继续时重启启动任务
    td.Settings.IdleSettings.RestartOnIdle = true;
    //如果计算机开始使用电池供电时任务将停止。
    td.Settings.StopIfGoingOnBatteries = true;
    //当任务被启动时唤醒计算机
    td.Settings.WakeToRun = true;
    //任务计划程序将仅在网络可用时运行任务
    td.Settings.RunOnlyIfNetworkAvailable = true;
    //任务计划程序将仅在网络名字为指定名字的时候才会执行
    td.Settings.NetworkSettings.Name = "网络 3";

5.设置

csharp 复制代码
 //如果过了计划开始时间,立即重启任务
    td.Settings.StartWhenAvailable = true;
    //如果任务执行失败,则按照1分钟的频率重启
    td.Settings.RestartInterval = TimeSpan.FromMinutes(1);
    //尝试重启任务次数为5次
    td.Settings.RestartCount = 5;
    //设置任务运行时间为30天,当设置为0时则为永久状态
    td.Settings.ExecutionTimeLimit = TimeSpan.FromDays(30);
    //如何任务没有计划再次运行,则指定时间后删除任务
    td.Settings.DeleteExpiredTaskAfter=TimeSpan.FromDays(1);
    //如果请求后任务还在运行,强行将其停止
    td.Settings.AllowHardTerminate = true;
    //设置如果任务运行则停止当前任务,重新执行任务实例
    td.Settings.MultipleInstances=TaskInstancesPolicy.StopExisting;

如何正确使用微软API文档

首先推荐使用网页端的英文版,由于微软文档的翻译时通过机器翻译的,但是实际翻译效果并不好,会将对象翻译,并且解释语句通常翻译的带有歧义。如果需要使用翻译可以将句子放入第三方进行翻译最佳。

现在我们以触发器作为讲解案例。



相关推荐
初听于你15 分钟前
深入了解—揭秘计算机底层奥秘
windows·tcp/ip·计算机网络·面试·架构·电脑·vim
IoT小趴菜2 小时前
操作无法完成,因为磁盘管理控制台视图不是最新状态。请使用刷新任务刷新此视图。如果问题仍然存在,请关闭磁盘管理控制台,然后重新启动磁盘管理或重新启动计算机
windows·存储
c#上位机3 小时前
wpf中Grid的MouseDown 事件无法触发的原因
c#·wpf
CodeCraft Studio4 小时前
国产化PDF处理控件Spire.PDF教程:如何在 C# 中从 HTML 和 PDF 模板生成 PDF
pdf·c#·html·.net·spire.pdf·pdf文档开发·html创建模板pdf
x_feng_x5 小时前
Java从入门到精通 - 集合框架(二)
java·开发语言·windows
小薛引路5 小时前
office便捷办公06:根据相似度去掉excel中的重复行
windows·python·excel
黑马金牌编程5 小时前
Jenkins的Linux与window部署方式
linux·运维·windows·jenkins·持续集成·cicd
ysdysyn6 小时前
.NET 10深度解析:性能革新与开发生态的全新篇章
c#·.net
欢璃7 小时前
修电脑日志--电脑开机黑屏只有光标闪
windows·安全·电脑·安全架构
L X..9 小时前
Unity 光照贴图异常修复笔记
unity·c#·游戏引擎