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);
}
}
}
}