我正在开发基于附加组件的应用程序。每个附加组件都使用调度程序。加载的附加计划任务。我的应用程序只运行一个实例。应用程序关闭,有时运行。因此,我需要使用Windows 7任务计划程序
如何在自己的应用程序上使用任务调度程序?
我需要从申请中创建新任务
我需要在任务完成时,将消息发送到我的应用程序或调用我的应用程序的任何功能
有可能吗?
怎么做?
答案 0 :(得分:5)
在CodeProject查看此项目。
答案 1 :(得分:5)
如果要从代码中与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<ITaskFolder>().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等以满足您的需求。
答案 2 :(得分:0)
感谢凯特的优秀榜样,我觉得在我的游荡中我没有先遇到你的代码。
通过c#代码注册计划任务,我有一个愉快的舞蹈,毫不奇怪,我不得不调整我的计划创建代码,因为我遇到了一个以前没有遇到过的环境中的障碍。我希望我已经找到了最强大的代码,如果我遇到环境问题,如果我分享一些你可能会尝试的东西,那么它也可能对其他人有益: