有些工作可以用作業系統提供的”排定的工作”來設定排程,用手動來設定很簡單,但要怎麼用程式去完成,似乎就沒有那麼的簡單了.
有些工作可以用作業系統提供的”排定的工作”來設定排程,用手動來設定很簡單,但要怎麼用程式去完成,似乎就沒有那麼的簡單了.
在剛開始的時候,我想到的是Command line的指令schtasks.exe,這個指令的用法不難,比如說列出本機的排程,直接打Schtasks就會列出來,列出別台電腦的排程Schtasks /query /s 目標電腦名稱.
schtasks.exe當然還可以做排程的新增/修改/刪除/執行/中止的動作.
詳細說明可見schtasks /?或是MSDN上的說明.
private void ShowScheduleSetting(string PCName) { DataTable dt = GetJobListTable(); try { ScheduledTasks st = new ScheduledTasks(@"\\" + PCName);//取得目標電腦的排程資料 string[] arytaskNames = st.GetTaskNames();//取得所有排程名稱 foreach (string name in arytaskNames) { Task t = st.OpenTask(name);//取得排程明細 DataRow dr = dt.NewRow(); dr["JobName"] = t.Name; dr["MostRecentRunTime"] = t.MostRecentRunTime; dr["NextRunTime"] = t.NextRunTime; if (t.NextRunTime.ToString("yyyy/MM/dd") != "0001/01/01") { dr["NextRunTimeAfter"] = t.NextRunTimeAfter(t.NextRunTime); } dr["AccountName"] = t.AccountName; dr["Creator"] = t.Creator; dr["ApplicationName"] = t.ApplicationName; dr["WorkingDirectory"] = t.WorkingDirectory; dr["Comment"] = t.Comment; dr["Status"] = t.Status; t.Close();//關閉排程操作 dt.Rows.Add(dr); } } catch (Exception ex) { MessageBox.Show(ex.Message); } gridList.DataSource = dt; } private DataTable GetJobListTable() { DataTable dt = new DataTable("JobList"); dt.Columns.Add("JobName"); dt.Columns.Add("MostRecentRunTime"); dt.Columns.Add("NextRunTime"); dt.Columns.Add("NextRunTimeAfter"); dt.Columns.Add("AccountName"); dt.Columns.Add("Creator"); dt.Columns.Add("ApplicationName"); dt.Columns.Add("WorkingDirectory"); dt.Columns.Add("Comment"); dt.Columns.Add("Status"); return dt; }
從ShowScheduleSetting這個function看起來,真的沒什麼難的地方,這個元件不只提供Query,其它的schtasks有的功能它也都有,有興趣的人可以看這元件的說明文件,而元件的下載部份,就不提供了,請自行點以下參考連結去下載,那裡作者還有更多的介紹~
*不知道何時.Net Framework可以把這部份加進去,目前看了一下.Net 4.0 Beta,還沒看到它..
參考 :
A New Task Scheduler Class Library for .NET