AutoLoopClass.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows.Forms;
  7. using System.IO;
  8. using TaskScheduler;
  9. using DevExpress.XtraEditors;
  10. namespace Uninpho.Tools.components.SomethingSetting
  11. {
  12. /// <summary>
  13. /// 自动化开关
  14. /// </summary>
  15. class AutoLoopClass
  16. {
  17. public AutoLoopClass(bool isstart)
  18. {
  19. if (isstart)
  20. {
  21. //开启
  22. AddWinTask(zdhSetClass.taskName, zdhSetClass.zdhexe, "P7D");
  23. XtraMessageBox.Show("算法自动化已加入windows任务计划", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  24. }
  25. else
  26. {
  27. //关闭
  28. try
  29. {
  30. TaskSchedulerClass scheduler = new TaskSchedulerClass();
  31. scheduler.Connect(null, null, null, null);
  32. ITaskFolder folder = scheduler.GetFolder("\\");
  33. folder.DeleteTask(zdhSetClass.taskName, 0);
  34. }
  35. catch
  36. {
  37. }
  38. finally
  39. {
  40. XtraMessageBox.Show("算法自动化已从windows任务计划移除", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  41. }
  42. }
  43. }
  44. /// <summary>
  45. /// 添加Windows任务计划
  46. /// 在系统C:\Windows\System32找到taskschd.dll并引用到项目中,选中dll将嵌入互操作类型改为false
  47. /// </summary>
  48. /// <param name="taskName">任务名称</param>
  49. /// <param name="exePath">执行程序路径</param>
  50. /// <param name="interval">计划任务执行的频率
  51. /// </param>
  52. static void AddWinTask(string taskName, string exePath, string interval)
  53. {
  54. TaskSchedulerClass scheduler = new TaskSchedulerClass();
  55. scheduler.Connect(null, null, null, null);
  56. ITaskFolder folder = scheduler.GetFolder("\\");
  57. //获取所有Task
  58. IRegisteredTaskCollection tasks = folder.GetTasks(1);
  59. try
  60. {
  61. folder.DeleteTask(taskName, 0);
  62. }
  63. catch
  64. {
  65. }
  66. finally
  67. {
  68. //创建新的Task
  69. ITaskDefinition task = scheduler.NewTask(0);
  70. task.RegistrationInfo.Description = taskName;
  71. // IDailyTrigger、IMonthlyTrigger、IEventTrigger
  72. ITimeTrigger triger = (ITimeTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);
  73. //执行间隔
  74. triger.Repetition.Interval = interval;
  75. //任务开始时间(第一次执行时间)
  76. triger.StartBoundary = Convert.ToDateTime(zdhSetClass.startdate).ToString("yyyy-MM-ddTHH:mm:ss");
  77. //指定要执行的程序路径
  78. IExecAction action = (IExecAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC);
  79. action.Path = exePath;
  80. //设置参数
  81. action.Arguments = "C#";
  82. //注册任务并开启执行
  83. IRegisteredTask regTask = folder.RegisterTaskDefinition(taskName, task, (int)_TASK_CREATION.TASK_CREATE, null, null, _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN);
  84. //IRunningTask runTask = regTask.Run(null);
  85. }
  86. }
  87. }
  88. }