using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using TaskScheduler; using DevExpress.XtraEditors; namespace Uninpho.Tools.components.SomethingSetting { /// /// 自动化开关 /// class AutoLoopClass { public AutoLoopClass(bool isstart) { if (isstart) { //开启 AddWinTask(zdhSetClass.taskName, zdhSetClass.zdhexe, "P7D"); XtraMessageBox.Show("算法自动化已加入windows任务计划", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { //关闭 try { TaskSchedulerClass scheduler = new TaskSchedulerClass(); scheduler.Connect(null, null, null, null); ITaskFolder folder = scheduler.GetFolder("\\"); folder.DeleteTask(zdhSetClass.taskName, 0); } catch { } finally { XtraMessageBox.Show("算法自动化已从windows任务计划移除", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } /// /// 添加Windows任务计划 /// 在系统C:\Windows\System32找到taskschd.dll并引用到项目中,选中dll将嵌入互操作类型改为false /// /// 任务名称 /// 执行程序路径 /// 计划任务执行的频率 /// static void AddWinTask(string taskName, string exePath, string interval) { TaskSchedulerClass scheduler = new TaskSchedulerClass(); scheduler.Connect(null, null, null, null); ITaskFolder folder = scheduler.GetFolder("\\"); //获取所有Task IRegisteredTaskCollection tasks = folder.GetTasks(1); try { folder.DeleteTask(taskName, 0); } catch { } finally { //创建新的Task ITaskDefinition task = scheduler.NewTask(0); task.RegistrationInfo.Description = taskName; // IDailyTrigger、IMonthlyTrigger、IEventTrigger ITimeTrigger triger = (ITimeTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME); //执行间隔 triger.Repetition.Interval = interval; //任务开始时间(第一次执行时间) triger.StartBoundary = Convert.ToDateTime(zdhSetClass.startdate).ToString("yyyy-MM-ddTHH:mm:ss"); //指定要执行的程序路径 IExecAction action = (IExecAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC); action.Path = exePath; //设置参数 action.Arguments = "C#"; //注册任务并开启执行 IRegisteredTask regTask = folder.RegisterTaskDefinition(taskName, task, (int)_TASK_CREATION.TASK_CREATE, null, null, _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN); //IRunningTask runTask = regTask.Run(null); } } } }