有些工作可以用作業系統提供的”排定的工作”來設定排程,用手動來設定很簡單,但要怎麼用程式去完成,似乎就沒有那麼的簡單了.
有些工作可以用作業系統提供的”排定的工作”來設定排程,用手動來設定很簡單,但要怎麼用程式去完成,似乎就沒有那麼的簡單了.
在剛開始的時候,我想到的是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