计划任务
计划任务
Schtasks
schtasks命令可以用来管理计划任务,允许管理员创建、删除、查询、更改、运行和终止本地或远程系统上的计划任务。
参数列表:
/Create 创建新计划任务。
/Delete 删除计划任务。
/Query 显示所有计划任务。
/Change 更改计划任务属性。
/Run 按需运行计划任务。
/End 终止当前正在运行的计划任务。
/ShowSid 显示与计划的任务名称相应的安全标示符。
/? 显示帮助消息。
如需获取每个参数的帮助信息,都可以在参数后面加/?来获取更多帮助。例如:
schtasks /create /?
具体参数列表这里就不放了。
放个示例命令:
schtasks /create /sc ONLOGON /tn testName /tr "c:\wo.exe" /f /rl Highest
这样就创建了名称为testName,在用户登录的时候以最高权限运行c:\wo.exe程序。
bat脚本执行计划任务
示例如下:
@echo off
Echo "开始运行"
Echo %1
Echo %2
schtasks /create /SC ONLOGON /TN %1 /TR '%2' /F /RL HIGHEST
其中%1代表第一个传入的参数,这里我作为计划任务的名称。%2表示第二个传入的参数,这里我作为计划任务要启动的应用程序。
其中要注意的是路径中如果有空格必须要将路径使用""包起来。
nsis中执行bat脚本的计划任务
Exec "$INSTDIR\TaskAuto.bat Test $\"$INSTDIR\Test.exe$\""
其中要使用$\来转义"。
C#管理计划任务
在C#中可以使用TaskScheduler库来管理计划任务。
简单示例:
/// <summary>
/// 创建登录运行程序
/// </summary>
/// <param name="name">计划任务名称</param>
/// <param name="exePath">运行程序路径</param>
/// <param name="description">计划描述</param>
public static void CreateOnlogonTask(string name, string exePath, string description = null)
{
Microsoft.Win32.TaskScheduler.TaskService service = new Microsoft.Win32.TaskScheduler.TaskService();
Microsoft.Win32.TaskScheduler.TaskDefinition td = service.NewTask();
Microsoft.Win32.TaskScheduler.LogonTrigger logonTrigger = new Microsoft.Win32.TaskScheduler.LogonTrigger();
logonTrigger.Delay = TimeSpan.FromSeconds(30);//延时30秒执行
td.Triggers.Add(logonTrigger);//添加触发器
Microsoft.Win32.TaskScheduler.ExecAction execAction = new Microsoft.Win32.TaskScheduler.ExecAction(exePath);
td.Actions.Add(execAction);//添加操作项
td.RegistrationInfo.Description = description;//任务描述
td.Principal.RunLevel = Microsoft.Win32.TaskScheduler.TaskRunLevel.Highest;//最高权限运行
service.RootFolder.RegisterTaskDefinition(name, td);
}