2010-07-29 46 views
2

我正在開發基於附加應用程序。每個附加使用調度程序。加載的附加計劃任務。我的應用程序只運行一個實例。有時應用程序關閉,有時運行。因此我需要使用Windows 7任務調度程序是否可以在自己的應用程序中使用Windows 7任務調度程序

如何在自己的應用程序上使用任務調度程序?

我需要從應用程序
我需要的是,當任務完成,信息發送到我的應用程序或調用我的應用程序的任何功能
是否有可能創造新的任務?
如何做到這一點?

回答

5

在CodeProject上看看這個項目。

A New Task Scheduler Class Library for .NET

+0

這個庫真的在Windows 7上運行? – ebattulga 2010-07-29 05:41:48

+0

是的。它適用於Vista,所以它可以在Windows 7上運行。它按照Kate Gregory描述的方式做了一些事情。 – 2010-07-29 15:29:20

5

如果你想從你的代碼來創建,管理或刪除任務是沒有問題的Windows 7的計劃任務系統進行交互。 (我在Windows 7的過程中,我寫了Pluralsight介紹。)添加一個COM引用的TaskScheduler,然後你做這樣的事情:

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等來滿足你的需求。

+1

這是一個好的開始。但是,CodePlex.com中的任務計劃程序有一個經過管理的包裝程序,使其更容易。 http://taskscheduler.codeplex.com/ – newman 2011-03-25 19:40:02

0

感謝Kate這個優秀的例子,在我的漫遊中,我沒有先遇到你的代碼。

我已經通過c#代碼註冊計劃任務,並且毫不意外地必須調整我的計劃創建代碼,因爲我在之前沒有遇到過的一個環境中遇到障礙。我希望我在最強大的代碼來了,認爲它可能也有益於他人,如果我分享一些東西,你可以嘗試,如果遇到環境問題:

  • 把可執行文件路徑用雙引號
  • 不要將工作文件夾放在引號中
  • 創建任務後,如果進行後續更改,請調用ask.RegisterChanges(); - 它可能是值得設置的task.Definition.Principal.RunLevel = TaskRunLevel.Highest;
  • 我通常默認爲一個系統帳戶來運行任務,但在一些網絡環境中,我遇到了一些我無法理解的問題,但能夠通過提供用戶帳戶來運行該任務。

所有最好的 馬特

相關問題