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

eba*_*lga 2 c# windows-services scheduling task windows-7

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

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

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

小智 5

在CodeProject查看这个项目.

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


Kat*_*ory 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);
Run Code Online (Sandbox Code Playgroud)

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