用程式去維護作業系統的"排定的工作"

  有些工作可以用作業系統提供的”排定的工作”來設定排程,用手動來設定很簡單,但要怎麼用程式去完成,似乎就沒有那麼的簡單了.

  有些工作可以用作業系統提供的排定的工作來設定排程,用手動來設定很簡單,但要怎麼用程式去完成,似乎就沒有那麼的簡單了.

 

在剛開始的時候,我想到的是Command line的指令schtasks.exe,這個指令的用法不難,比如說列出本機的排程,直接打Schtasks就會列出來,列出別台電腦的排程Schtasks /query /s 目標電腦名稱.

 

schtasks.exe當然還可以做排程的新增/修改/刪除/執行/中止的動作.

詳細說明可見schtasks /?或是MSDN上的說明.

 

這做法OK,但似乎不是很好,除此之外就沒有什麼方法可以用了嗎,於是上網查了一下,Code Project看到有人分享出元件直接供人使用,真的是大好人,做的很細心,還有說明文件,雖然在測試過程中有點問題,但都給你原始碼了,修一修就好,這元件的用法還算簡單,下面的Sample Code就是列出怎麼去取得電腦所有的排程清單

 

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,還沒看到它..

 

參考 :

SchTasks.exe MSDN說明

A New Task Scheduler Class Library for .NET