使用Task Scheduler Managed Wrapper去寫程式取得或設定1.0及2.0版Task Schedule(排定的工作).
使用Task Scheduler Managed Wrapper去寫程式取得或設定1.0及2.0版Task Schedule(排定的工作).
1個月前才寫過一篇 [用程式去維護作業系統的"排定的工作"],最近在CodePlex看到一篇也是有關Task Schedule的,於是這次改用CodePlex上所提供的方法來試做,看能不能用來減化我自己的工作.
我自己是有這樣的困擾,因為有很多台電腦都有設排程,有時為了看一個排程的設定,或是每台電腦有一個排程要改時間,我就必需遠端登入到每台電腦裡去修改,這個登入的動作感覺很沒必要,也很浪費時間,所以希望能在我的本機上,就可以看到每台電腦的排程設定及修改排程.
這次要用CodePlex上的做法,所以就需要下載它的元件,這個元件可至CodePlex下載,這裡就不提供,下載好元件,解開後會看到一堆檔案及目錄,而最重要的是它有提供說明檔TaskScheduler.chm,裡面也有很詳盡的說明,這些都好了之後,就可以開始使用TaskScheduler.
首先在我們的專案將剛剛目錄下的Microsoft.Win32.TaskScheduler.dll加入參考,雖然還有其它兩個dll,但這次只有用到這個,另外兩個就先不用了.加入參考後,接下來當然是要using這個namespace.
using Microsoft.Win32.TaskScheduler;
//取得排程 :
try
{
using (TaskService ts = new TaskService(""))
{//如果帶入空白參數或是不帶,則會帶出本機的排程,要帶入其它電腦,就帶入電腦名稱
//也可帶入有權限的帳號及密碼
using (TaskFolder tf = ts.GetFolder(""))
{//GetFolder在1.X只要帶入空白即可,2.0才有支援
using (DataTable dt = new DataTable())
{
dt.Columns.Add("Name");
dt.Columns.Add("Enabled");
dt.Columns.Add("LastRunTime");
dt.Columns.Add("LastTaskResult");
dt.Columns.Add("NextRunTime");
dt.Columns.Add("Path");
dt.Columns.Add("State");
dt.Columns.Add("Connected");
foreach (Task t in tf.Tasks)
{
DataRow dr = dt.NewRow();
dr["Name"] = t.Name;//名稱
dr["Enabled"] = t.Enabled;//啟用
dr["LastRunTime"] = t.LastRunTime;//最後一次執行時間
dr["LastTaskResult"] = t.LastTaskResult;//最後一次執行結果
dr["NextRunTime"] = t.NextRunTime;//下次執行時間
dr["Path"] = t.Path;//路徑
dr["State"] = t.State;//狀態
dr["Connected"] = t.TaskService.Connected;//連線狀態
dt.Rows.Add(dr);
}
gridList.DataSource = dt;
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
呼叫出設定視窗,這點我就比較偷懶,沒有再自己寫下去每個設定,我是直接用Task的ShowPropertyPage(),這樣就可以直接使用OS自己的Task Scheduler介面來維護(僅支援1.0),有現成的介面,就用它來做就好,這樣也能達到我的需求了.
刪除排程 :
TaskFolder.DeleteTask(“排程名稱”)
新增排程空白排程 :
TaskDefinition td = ts.NewTask();
Microsoft.Win32.TaskScheduler.Task T= TaskFolder.RegisterTaskDefinition(“TaskName”, td);
t.ShowPropertyPage();//設定新增的空白排程
因為我偷懶的關係,只想要以最少的動作,最快的速度來達成自己的需求,所以是直接用ShowPropertyPage來設定,但其實它還有很多功能,請自行參考CodePlex上的教學或是說明檔TaskScheduler.chm.
以下為Sample Code的操作介面 :
L清單維護 : 維護電腦名稱清單.
R重新載入 : 重新載入工作排程清單
A新增 : 新增一個工作排程
S設定排程 : 設定工作排程(編輯)
D刪除 : 刪除工作排程
E離開 : 關閉程式
參考 :
Task Scheduler Managed Wrapper: 由程式來排程工作
Task Scheduler Managed Wrapper
範例 : WinScheduleTool.zip