2012-11-06 67 views
1

這是用例: - 創建一個新的win任務,立即運行,一旦完成,刪除任務。創建win任務運行一次,並立即刪除使用C#

這裏是使用C#創建任務的基本代碼。

using (TaskService ts = new TaskService(null)) 
    { 
     string projectName = "runnowtest" + Guid.NewGuid().ToString(); 

     //create new task 
     TaskDefinition td = ts.NewTask(); 
     Trigger mt = null; 

     //setup task as Registration trigger 
     mt = td.Triggers.AddNew(TaskTriggerType.Registration); 
     mt.StartBoundary = DateTime.Now; 

     //delete the task 1 minute after the program ends 
     td.Settings.DeleteExpiredTaskAfter = new TimeSpan(0, 1, 0); 

     //run the notepad++ in the task 
     td.Actions.Add(new ExecAction("notepad.exe")); 

     //register task 
     Task output = ts.RootFolder.RegisterTaskDefinition(projectName, td); 

     //check output 
     Console.WriteLine(output != null ? "Task created" : "Task not created"); 
    } 

該API似乎沒有用於將任務標記爲運行一次的屬性/標誌。我試圖確保上述任務只運行一次並在此之後立即刪除。任何想法都非常感謝!

+1

爲什麼通過調度運行它,當你可以只直接產生過程? –

+1

@RowlandShaw我明白我可以直接運行任何進程而無需調度程序。但是,我的問題是關於「使用Task Scheduler API」來實現這一點。 – pencilslate

+0

此解決方案不適用於Task Scheduler V1.3。當Version ver = ts.HighestSupportedVersion和Version.major = 1且Version.Minor = 3時,會引發「Microsoft.Win32.TaskScheduler.NotV1SupportedException」異常。 – Peter

回答

2

我知道它老了,但參考... 要使用DeleteExpiredTaskAfter你需要給觸發EndBoundary:

var trigger = new RegistrationTrigger{Delay = TimeSpan.FromSeconds(5), EndBoundary = DateTime.Now.Add(TimeSpan.FromSeconds(50))}; 
相關問題