プログラムをある程度の時間をおいて定期的に実行するときに、「タスクスケジューラ」を使って一定時間ごとになにかを実行するという仕掛けを作ることができます。
タスクスケジューラに自分でタスクを作成して登録をする。という使い方が多いです。
手作業で行ってもあまり手間がかかるわけでもありません。だからといってC#などのプログラムからこういった操作はできないのか?
というと、ちゃんとできるんです。
ということで、タスクを作成・登録するという操作をプログラムで作成してみます。
タスクスケジュールを操作するには、「TaskScheduler 1.1 Type Library」を参照に追加します。
「TaskScheduler 1.1 Type Library」はCOMにあります。
サンプルプログラムは下記のようになります。
public static void registTask(string path, string xml_path)
{
ITaskService taskservice = null;
try
{
taskservice = new TaskScheduler.TaskScheduler();
taskservice.Connect(null, null, null, null);
ITaskFolder rootfolder = null;
try
{
rootfolder = taskservice.GetFolder("\\");
System.Xml.XmlDocument document = new System.Xml.XmlDocument();
document.Load(xml_path);
try
{
rootfolder.RegisterTask(path
, document.InnerXml, (int)_TASK_CREATION.TASK_CREATE_OR_UPDATE
, null, null, _TASK_LOGON_TYPE.TASK_LOGON_NONE, null);
}
catch (System.UnauthorizedAccessException e)
{
throw e;
}
catch (System.Exception e)
{
throw e;
}
}
finally
{
if (rootfolder != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(rootfolder);
}
}
}
finally
{
if (taskservice != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(taskservice);
}
}
}
static void Main(string[] args)
{
//
// あらかじめタスクスケジューラでエクスポートしたXMLファイルのタスクを
// タスクスケジューラに登録する方法
//
string cmd_path = Environment.CurrentDirectory;
string path = "HelloTask";
string xml_path = System.IO.Path.Combine(cmd_path, "HelloTask.xml");
registTask(path, xml_path);
}

