eba*_*lga 2 c# windows-services scheduling task windows-7
我正在开发基于附加组件的应用程序.每个附加组件都使用调度程序.加载的附加计划任务.我的应用程序只运行一个实例.应用程序关闭,有时运行.因此,我需要使用Windows 7任务调度程序
如何在自己的应用程序上使用任务调度程序?
我需要从应用程序创建新任务
我需要在任务完成时,将消息发送到我的应用程序或调用我的应用程序的任何功能
是否可能?
怎么做?
如果要从代码中与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等以满足您的需求.