是否可以在自己的应用程序中使用Windows 7任务计划程序

我正在开发基于附加组件的应用程序。 每个附加组件都使用调度程序。 加载的附加计划任务。 我的应用程序只运行一个实例。 应用程序关闭,有时运行。 因此我需要使用Windows 7任务调度程序

如何在自己的应用程序上使用任务调度程序?

我需要从应用程序创建新任务
我需要在任务完成时,将消息发送到我的应用程序或调用我的应用程序的任何function
可能吗?
怎么做?

在CodeProject上查看这个项目。

一个新的.NET任务调度程序类库

如果要从代码中与Windows 7计划任务系统进行交互,以创建,管理或删除没有问题的任务。 (我在为Pluralsight编写的Windows 7课程中介绍了这一点。)向TaskScheduler添加一个COM引用然后你做了这样的事情:

ITaskService scheduler = new TaskSchedulerClass(); scheduler.Connect(null, null, null, null); ITaskFolder rootFolder = scheduler.GetFolder("\\"); ITaskFolder folder = rootFolder.GetFolders(0).Cast().FirstOrDefault( f => f.Name == "Windows7Course"); if (folder == null) { folder = rootFolder.CreateFolder("Windows7Course", null); } ITaskDefinition task = scheduler.NewTask(0); IExecAction action = (IExecAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC); action.Path = typeof(SayHello.Form1).Assembly.Location; action.WorkingDirectory = Path.GetDirectoryName(typeof(SayHello.Form1).Assembly.Location); ISessionStateChangeTrigger trigger = (ISessionStateChangeTrigger)task.Triggers.Create( _TASK_TRIGGER_TYPE2.TASK_TRIGGER_SESSION_STATE_CHANGE); trigger.StateChange = _TASK_SESSION_STATE_CHANGE_TYPE.TASK_SESSION_UNLOCK; task.Settings.DisallowStartIfOnBatteries = true; task.RegistrationInfo.Author = "Kate Gregory"; task.RegistrationInfo.Description = "Launches a greeting."; IRegisteredTask ticket = folder.RegisterTaskDefinition( "GreetReturningUser", task, (int)_TASK_CREATION.TASK_CREATE_OR_UPDATE, null, null, _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN, null); 

此特定示例运行在同一解决方案(另一个项目)中的exe。 您必须调整Action.Path,Action.WorkingDirectory等以满足您的需求。

感谢凯特的优秀榜样,我觉得在我的游荡中我没有先遇到你的代码。

我通过c#代码注册计划任务有一个快乐的舞蹈,并且不出所料地不得不调整我的计划创建代码,因为我遇到了一个我之前没有遇到过的环境的障碍。 我希望我已经找到了最强大的代码,如果我遇到环境问题,如果我分享一些你可能会尝试的东西,我认为它也可能对其他人有益:

  • 用双引号将路径放到可执行文件中
  • 不要将工作文件夹放在引号中
  • 创建任务后,如果进行后续更改,请调用ask.RegisterChanges(); – 可能值得设置任务.Definition.Principal.RunLevel = TaskRunLevel.Highest;
  • 我通常默认使用系统帐户来运行任务,但在某些网络环境中,我遇到了一些我无法理解但能够通过提供用户帐户来解决的问题。

所有最好的马特