• C#操作系统计划任务


    首先需要引用system32下的taskschd.dll

    测试环境:win8+vs2012+.net4.0

      1  /// <summary>
      2         /// 删除任务
      3         /// </summary>
      4         /// <param name="taskName"></param>
      5         private static void DeleteTask(string taskName)
      6         {
      7             TaskSchedulerClass ts = new TaskScheduler.TaskSchedulerClass();
      8             ts.Connect(null, null, null, null);
      9             ITaskFolder folder = ts.GetFolder("\");
     10             folder.DeleteTask(taskName, 0);
     11         }
     12 
     13         /// <summary>
     14         /// 获取所有任务
     15         /// </summary>
     16         public static IRegisteredTaskCollection GetAllTasks()
     17         {
     18             TaskSchedulerClass ts = new TaskSchedulerClass();
     19             ts.Connect(null, null, null, null);
     20             ITaskFolder folder = ts.GetFolder("\");
     21             IRegisteredTaskCollection tasks_exists = folder.GetTasks(1);
     22             return tasks_exists;
     23         }
     24 
     25         /// <summary>
     26         /// 任务是否存在
     27         /// </summary>
     28         /// <param name="taskName"></param>
     29         /// <returns></returns>
     30         public static bool IsExists(string taskName)
     31         {
     32             var isExists = false;
     33             IRegisteredTaskCollection tasks_exists = GetAllTasks();
     34             for (int i = 1; i <= tasks_exists.Count; i++)
     35             {
     36                 IRegisteredTask t = tasks_exists[i];
     37                 if (t.Name.Equals(taskName))
     38                 {
     39                     isExists = true;
     40                     break;
     41                 }
     42             }
     43             return isExists;
     44         }
     45 
     46         /// <summary>
     47         /// 创建任务
     48         /// </summary>
     49         /// <param name="creator"></param>
     50         /// <param name="taskName"></param>
     51         /// <param name="path"></param>
     52         /// <param name="starttime"></param>
     53         /// <param name="interval"></param>
     54         /// <param name="description"></param>
     55         /// <returns></returns>
     56         public static _TASK_STATE CreateTaskScheduler(string creator, string taskName, string path, string starttime, string interval, string description)
     57         {
     58             try
     59             {
     60                 if (IsExists(taskName))
     61                 {
     62                     DeleteTask(taskName);
     63                 }
     64 
     65                 //new scheduler
     66                 TaskSchedulerClass scheduler = new TaskSchedulerClass();
     67                 //pc-name/ip,username,domain,password
     68                 scheduler.Connect(null, null, null, null);
     69                 //get scheduler folder
     70                 ITaskFolder folder = scheduler.GetFolder("\");
     71 
     72                 //set base attr 
     73                 ITaskDefinition task = scheduler.NewTask(0);
     74                 task.RegistrationInfo.Author = creator;//creator
     75                 task.RegistrationInfo.Description = description;
     76 
     77                 //set trigger  (IDailyTrigger ITimeTrigger)
     78                 ITimeTrigger tt = (ITimeTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);
     79                 tt.Repetition.Interval = interval;// format PT1H1M==1小时1分钟 设置的值最终都会转成分钟加入到触发器
     80                 tt.StartBoundary = starttime;//start time
     81 
     82                 //set action
     83                 IExecAction action = (IExecAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC);
     84                 action.Path = path;
     85                 action.Arguments = "AB1";//运行程序时需要的参数,如果没有可以不写。
     86 
     87                 task.Settings.ExecutionTimeLimit = "PT0S"; //运行任务时间超时停止任务吗? PTOS 不开启超时
     88                 task.Settings.DisallowStartIfOnBatteries = false;//只有在交流电源下才执行
     89                 task.Settings.RunOnlyIfIdle = false;//仅当计算机空闲下才执行
     90 
     91                 IRegisteredTask regTask = folder.RegisterTaskDefinition(taskName, task,
     92                                                                     (int)_TASK_CREATION.TASK_CREATE,
     93                                                                     null, //user
     94                                                                     null, // password
     95                                                                     _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN,
     96                                                                     "");
     97                 IRunningTask runTask = regTask.Run(null);
     98                 return runTask.State;
     99 
    100             }
    101             catch (Exception ex)
    102             {
    103                 throw ex;
    104             }
    105 
    106         }

    调用方法:

     1         private void button5_Click(object sender, EventArgs e)
     2         {
     3             //string a = WindowsIdentity.GetCurrent().Name;
     4             //string b = Environment.UserName;
     5             //string c = System.Net.Dns.GetHostName();
     6 
     7             string creator = "Hello";
     8             string taskName = "Hello.Task";
     9             string path = Application.StartupPath + "\aaaa.bat";
    10             string interval = "PT1H1M";//格式 PT1H1M==1小时1分钟
    11             string starttime = DateTime.Now.ToString("yyyy-MM-ddT00:00:00"); //格式 "2015-10-09T14:27:25";
    12             string description = "";
    13 
    14             CreateTaskScheduler(creator, taskName, path, starttime, interval, description);
    15         }
  • 相关阅读:
    使用Layui上传图片,并进行压缩(非原创,证实可用)
    mysql 存储过程及事件
    Redis一些简单的笔记
    RIOT 技术笔记-01 RIOT介绍
    杂七杂八-ubuntu安装eclipse
    杂七杂八-sqlyog连接mysql错误码2058
    杂七杂八-Mysql8.0忘记root密码
    RIOT学习笔记-01 cygwin安装
    Ubutun-安装远程桌面
    中间件-RocketMQ 02 Docker下的安装
  • 原文地址:https://www.cnblogs.com/wz122889488/p/4915165.html
Copyright © 2020-2023  润新知