<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>taskscheduler Wiki &amp; Documentation Rss Feed</title><link>http://www.codeplex.com/taskscheduler/Wiki/View.aspx?title=Home</link><description>taskscheduler Wiki Rss Description</description><item><title>New Comment on "Examples"</title><link>https://taskscheduler.codeplex.com/wikipage?title=Examples&amp;ANCHOR#C27535</link><description>sisir14, please see note on prefacing Action references on this page with &amp;#39;Microsoft.Win32.TaskScheduler&amp;#39;</description><author>dahall</author><pubDate>Mon, 20 May 2013 15:49:12 GMT</pubDate><guid isPermaLink="false">New Comment on "Examples" 20130520034912P</guid></item><item><title>Updated Wiki: Examples</title><link>https://taskscheduler.codeplex.com/wikipage?title=Examples&amp;version=11</link><description>&lt;div class="wikidoc"&gt;Below are some examples of how to use most of the functions of the library:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="#remote"&gt;Connecting to a remove server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#editor"&gt;Using the editor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#simple"&gt;Simple example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#enum"&gt;Enumerate all tasks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#complex"&gt;Complex example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#history"&gt;Task history example&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;i&gt;&lt;b&gt;On all these examples, if you get an error on ambiguous references for &amp;#39;Action&amp;#39;, please preface it with &amp;#39;Microsoft.Win32.TaskScheduler.Action&amp;#39;.&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;You can also go to these pages for more sample code:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="https://taskscheduler.codeplex.com/wikipage?title=TriggerSamples&amp;referringTitle=Examples"&gt;Trigger Example Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://taskscheduler.codeplex.com/wikipage?title=ActionSamples&amp;referringTitle=Examples"&gt;Action Example Code&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;Connecting to a remote server&lt;/b&gt;&lt;a name="remote"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Connect to the computer &amp;quot;REMOTE&amp;quot; using credentials&lt;/span&gt;
TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService(&lt;span style="color:#A31515;"&gt;&amp;quot;\\REMOTE&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;myusername&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;MYDOMAIN&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;mypassword&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Using the editor&lt;/b&gt;&lt;a name="editor"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Get the service on the local machine&lt;/span&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; (TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService())
{
   &lt;span style="color:Green;"&gt;// Create a new task&lt;/span&gt;
   &lt;span style="color:Blue;"&gt;const&lt;/span&gt; &lt;span style="color:Blue;"&gt;string&lt;/span&gt; taskName = &lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;;
   Task t = ts.AddTask(taskName, 
      &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TimeTrigger() { StartBoundary = DateTime.Now + TimeSpan.FromHours(1), Enabled = &lt;span style="color:Blue;"&gt;false&lt;/span&gt; },
      &lt;span style="color:Blue;"&gt;new&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\\test.log&amp;quot;&lt;/span&gt;, &amp;quot;C:\\&amp;quot;));

   &lt;span style="color:Green;"&gt;// Edit task and re-register if user clicks Ok&lt;/span&gt;
   TaskEditDialog editorForm = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskEditDialog();
   editorForm.Editable = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
   editorForm.RegisterTaskOnAccept = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
   editorForm.Initialize(t);
   &lt;span style="color:Green;"&gt;// ** The four lines above can be replaced by using the full constructor -- TaskEditDialog(t, true, true)&lt;/span&gt;
   editorForm.ShowDialog();

   &lt;span style="color:Green;"&gt;// Remove the task we just created&lt;/span&gt;
   ts.RootFolder.DeleteTask(taskName);
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Simple example&lt;/b&gt;&lt;a name="simple"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Get the service on the local machine&lt;/span&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; (TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService())
{
   &lt;span style="color:Green;"&gt;// Create a new task definition and assign properties&lt;/span&gt;
   TaskDefinition td = ts.NewTask();
   td.RegistrationInfo.Description = &lt;span style="color:#A31515;"&gt;&amp;quot;Does something&amp;quot;&lt;/span&gt;;
   td.Principal.LogonType = TaskLogonType.InteractiveToken;

   &lt;span style="color:Green;"&gt;// Add a trigger that will fire the task at this time every other day&lt;/span&gt;
   DailyTrigger dt = (DailyTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; DailyTrigger { DaysInterval = 2 });
   dt.Repetition.Duration = TimeSpan.FromHours(4);
   dt.Repetition.Interval = TimeSpan.FromHours(1);

   &lt;span style="color:Green;"&gt;// Add a trigger that will fire every week on Friday&lt;/span&gt;
   td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; WeeklyTrigger { StartBoundary = DateTime.Today + TimeSpan.FromHours(2), DaysOfWeek = DaysOfTheWeek.Friday });

   &lt;span style="color:Green;"&gt;// Add an action that will launch Notepad whenever the trigger fires&lt;/span&gt;
   td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\\test.log&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;));

   &lt;span style="color:Green;"&gt;// Register the task in the root folder&lt;/span&gt;
   &lt;span style="color:Blue;"&gt;const&lt;/span&gt; &lt;span style="color:Blue;"&gt;string&lt;/span&gt; taskName = &lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;;
   ts.RootFolder.RegisterTaskDefinition(taskName, td);

   &lt;span style="color:Green;"&gt;// Retrieve the task, change the trigger and re-register it&lt;/span&gt;
   Task t = ts.GetTask(taskName);
   td = t.Definition;
   td.Triggers[0].StartBoundary = DateTime.Today + TimeSpan.FromDays(7);
   ts.RootFolder.RegisterTaskDefinition(taskName, td);

   &lt;span style="color:Green;"&gt;// Remove the task we just created&lt;/span&gt;
   ts.RootFolder.DeleteTask(taskName);
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Enumerate all tasks&lt;/b&gt;&lt;a name="enum"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;void&lt;/span&gt; EnumAllTasks()
{
   &lt;span style="color:Blue;"&gt;using&lt;/span&gt; (TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService())
      EnumFolderTasks(ts.RootFolder);
}

&lt;span style="color:Blue;"&gt;void&lt;/span&gt; EnumFolderTasks(TaskFolder fld)
{
   &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (Task task &lt;span style="color:Blue;"&gt;in&lt;/span&gt; fld.Tasks)
      ActOnTask(task);
   &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (TaskFolder sfld &lt;span style="color:Blue;"&gt;in&lt;/span&gt; fld.SubFolders)
      EnumFolderTasks(sfld);
}

&lt;span style="color:Blue;"&gt;void&lt;/span&gt; ActOnTask(Task t)
{
   &lt;span style="color:Green;"&gt;// Do something interesting here&lt;/span&gt;
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Complex example&lt;/b&gt;&lt;a name="complex"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;string&lt;/span&gt; user = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; preWin7 = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;

&lt;span style="color:Green;"&gt;// Get the service on the local machine&lt;/span&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; (TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService())
{
   &lt;span style="color:Green;"&gt;// Display version and server state&lt;/span&gt;
   Version ver = ts.HighestSupportedVersion;
   &lt;span style="color:Blue;"&gt;bool&lt;/span&gt; newVer = (ver &amp;gt;= &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Version(1, 2));
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Highest version: &amp;quot;&lt;/span&gt; + ver);
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Server: {0} ({1})&amp;quot;&lt;/span&gt;, ts.TargetServer, ts.Connected ? &lt;span style="color:#A31515;"&gt;&amp;quot;Connected&amp;quot;&lt;/span&gt; : &lt;span style="color:#A31515;"&gt;&amp;quot;Disconnected&amp;quot;&lt;/span&gt;);

   &lt;span style="color:Green;"&gt;// Output all of the running tasks&lt;/span&gt;
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Running tasks:&amp;quot;&lt;/span&gt;);
   &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (RunningTask rt &lt;span style="color:Blue;"&gt;in&lt;/span&gt; ts.GetRunningTasks(&lt;span style="color:Blue;"&gt;true&lt;/span&gt;))
   {
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (rt != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
      {
         Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;+ {0}, {1} ({2})&amp;quot;&lt;/span&gt;, rt.Name, rt.Path, rt.State);
         &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (ver.Minor &amp;gt; 0)
            Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;  Current Action: &amp;quot;&lt;/span&gt; + rt.CurrentAction);
      }
   }

   &lt;span style="color:Green;"&gt;// Output all the tasks in the root folder with their triggers and actions&lt;/span&gt;
   TaskFolder tf = ts.RootFolder;
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nRoot folder tasks ({0}):&amp;quot;&lt;/span&gt;, tf.Tasks.Count);
   &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (Task t &lt;span style="color:Blue;"&gt;in&lt;/span&gt; tf.Tasks)
   {
      &lt;span style="color:Blue;"&gt;try&lt;/span&gt;
      {
         Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;+ {0}, {1} ({2})&amp;quot;&lt;/span&gt;, t.Name, t.Definition.RegistrationInfo.Author, t.State);
         &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (Trigger trg &lt;span style="color:Blue;"&gt;in&lt;/span&gt; t.Definition.Triggers)
            Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot; + {0}&amp;quot;&lt;/span&gt;, trg);
         &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (Action act &lt;span style="color:Blue;"&gt;in&lt;/span&gt; t.Definition.Actions)
            Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot; = {0}&amp;quot;&lt;/span&gt;, act);
      }
      &lt;span style="color:Blue;"&gt;catch&lt;/span&gt; { }
   }

   &lt;span style="color:Green;"&gt;// Output an enumeration of all folders under the root&lt;/span&gt;
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\n***Checking folder enum***&amp;quot;&lt;/span&gt;);
   TaskFolderCollection tfs = tf.SubFolders;
   &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (tfs.Count &amp;gt; 0)
   {
      Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nSub folders:&amp;quot;&lt;/span&gt;);
      &lt;span style="color:Blue;"&gt;try&lt;/span&gt;
      {
         &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (TaskFolder sf &lt;span style="color:Blue;"&gt;in&lt;/span&gt; tfs)
            Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;+ {0}&amp;quot;&lt;/span&gt;, sf.Path);
      }
      &lt;span style="color:Blue;"&gt;catch&lt;/span&gt; (Exception ex)
      {
         Console.WriteLine(ex.ToString());
      }
   }

   &lt;span style="color:Green;"&gt;// Display information about the Microsoft folder&lt;/span&gt;
   &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer)
   {
      Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\n***Checking folder retrieval***&amp;quot;&lt;/span&gt;);
      &lt;span style="color:Blue;"&gt;try&lt;/span&gt;
      {
         TaskFolder sub = tf.SubFolders[&lt;span style="color:#A31515;"&gt;&amp;quot;Microsoft&amp;quot;&lt;/span&gt;];
         Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nSubfolder path: &amp;quot;&lt;/span&gt; + sub.Path);
      }
      &lt;span style="color:Blue;"&gt;catch&lt;/span&gt; (NotSupportedException) { }
      &lt;span style="color:Blue;"&gt;catch&lt;/span&gt; (Exception ex)
      {
         Console.WriteLine(ex.ToString());
      }
   }

   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\n***Checking task creation***&amp;quot;&lt;/span&gt;);
   &lt;span style="color:Blue;"&gt;try&lt;/span&gt;
   {
      &lt;span style="color:Green;"&gt;// Create a new task definition and assign properties&lt;/span&gt;
      TaskDefinition td = ts.NewTask();
      td.Data = &lt;span style="color:#A31515;"&gt;&amp;quot;Your data&amp;quot;&lt;/span&gt;;
      td.Principal.UserId = user;
      td.Principal.LogonType = TaskLogonType.InteractiveToken;
      td.RegistrationInfo.Author = &lt;span style="color:#A31515;"&gt;&amp;quot;dahall&amp;quot;&lt;/span&gt;;
      td.RegistrationInfo.Description = &lt;span style="color:#A31515;"&gt;&amp;quot;Does something&amp;quot;&lt;/span&gt;;
      td.RegistrationInfo.Documentation = &lt;span style="color:#A31515;"&gt;&amp;quot;Don&amp;#39;t pretend this is real.&amp;quot;&lt;/span&gt;;
      td.Settings.DisallowStartIfOnBatteries = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
      td.Settings.Enabled = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.ExecutionTimeLimit = TimeSpan.FromHours(2);
      td.Settings.Hidden = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.IdleSettings.IdleDuration = TimeSpan.FromMinutes(20);
      td.Settings.IdleSettings.RestartOnIdle = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.IdleSettings.StopOnIdleEnd = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.IdleSettings.WaitTimeout = TimeSpan.FromMinutes(10);
      td.Settings.Priority = System.Diagnostics.ProcessPriorityClass.Normal;
      td.Settings.RunOnlyIfIdle = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.RunOnlyIfNetworkAvailable = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.StopIfGoingOnBatteries = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer)
      {
         td.Principal.RunLevel = TaskRunLevel.Highest; &lt;span style="color:Green;"&gt;//.LUA;&lt;/span&gt;
         &lt;span style="color:Green;"&gt;//td.RegistrationInfo.SecurityDescriptorSddlForm = &amp;quot;O:COG:CGD::(A;;RPWPCCDCLCSWRCWDWOGA;;;S-1-0-0)&amp;quot;;&lt;/span&gt;
         td.RegistrationInfo.Source = &lt;span style="color:#A31515;"&gt;&amp;quot;Test App&amp;quot;&lt;/span&gt;;
         td.RegistrationInfo.URI = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Uri(&lt;span style="color:#A31515;"&gt;&amp;quot;test://app&amp;quot;&lt;/span&gt;);
         td.RegistrationInfo.Version = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Version(0, 9);
         td.Settings.AllowDemandStart = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
         td.Settings.AllowHardTerminate = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
         td.Settings.Compatibility = TaskCompatibility.V2;
         td.Settings.DeleteExpiredTaskAfter = TimeSpan.FromMinutes(1);
         td.Settings.MultipleInstances = TaskInstancesPolicy.StopExisting;
         td.Settings.StartWhenAvailable = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
         td.Settings.WakeToRun = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
         td.Settings.RestartCount = 5;
         td.Settings.RestartInterval = TimeSpan.FromSeconds(100);
      }

      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (preWin7)
      {
         &lt;span style="color:Green;"&gt;// Create a trigger that fires 5 minutes after the system is booted&lt;/span&gt;
         BootTrigger bTrigger = (BootTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; BootTrigger { Enabled = &lt;span style="color:Blue;"&gt;false&lt;/span&gt; });
         &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) bTrigger.Delay = TimeSpan.FromMinutes(5);
      }

      &lt;span style="color:Green;"&gt;// Create a trigger that fires every other day randomly between 6:00 a.m. and 8:00 a.m.&lt;/span&gt;
      DailyTrigger dTrigger = (DailyTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; DailyTrigger());
      dTrigger.StartBoundary = DateTime.Today + TimeSpan.FromHours(6);
      dTrigger.DaysInterval = 2;
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) dTrigger.RandomDelay = TimeSpan.FromHours(2);

      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer)
      {
         &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (preWin7)
         {
            &lt;span style="color:Green;"&gt;// Create a trigger that will fire on a system security event&lt;/span&gt;
            EventTrigger eTrigger = (EventTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; EventTrigger());
            eTrigger.SetBasic(&lt;span style="color:#A31515;"&gt;&amp;quot;Security&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;VSSAudit&amp;quot;&lt;/span&gt;, 25);
            eTrigger.ValueQueries.Add(&lt;span style="color:#A31515;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;Value&amp;quot;&lt;/span&gt;);
         }

         &lt;span style="color:Green;"&gt;// Create a trigger that fires 5 minutes after this task is registered&lt;/span&gt;
         td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; RegistrationTrigger { Delay = TimeSpan.FromMinutes(5) });

         &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (preWin7)
         {
            &lt;span style="color:Green;"&gt;// Create triggers that fire after various system states are changed&lt;/span&gt;
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.ConsoleConnect, UserId = user });
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.ConsoleDisconnect });
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.RemoteConnect });
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.RemoteDisconnect });
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.SessionLock, UserId = user });
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.SessionUnlock });
         }
      }

      &lt;span style="color:Green;"&gt;// Create a trigger that fires when the system is idle&lt;/span&gt;
      td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; IdleTrigger());

      &lt;span style="color:Green;"&gt;// Create a trigger that fires 15 minutes after the current user logs on and then every 1000 seconds after that&lt;/span&gt;
      LogonTrigger lTrigger = (LogonTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; LogonTrigger());
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer)
      {
         lTrigger.Delay = TimeSpan.FromMinutes(15);
         lTrigger.UserId = user;
         lTrigger.Repetition.Interval = TimeSpan.FromSeconds(1000);
      }

      &lt;span style="color:Green;"&gt;// Create a trigger that fires on the 3rd, 6th, 10th, 18th, and last days of July and November and stops triggering 90 days from now&lt;/span&gt;
      MonthlyTrigger mTrigger = (MonthlyTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MonthlyTrigger());
      mTrigger.DaysOfMonth = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; &lt;span style="color:Blue;"&gt;int&lt;/span&gt;[] { 3, 6, 10, 18 };
      mTrigger.MonthsOfYear = MonthsOfTheYear.July | MonthsOfTheYear.November;
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) mTrigger.RunOnLastDayOfMonth = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
      mTrigger.EndBoundary = DateTime.Today + TimeSpan.FromDays(90);

      &lt;span style="color:Green;"&gt;// Create a trigger that fires every day of the first and last week of December and January&lt;/span&gt;
      MonthlyDOWTrigger mdTrigger = (MonthlyDOWTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MonthlyDOWTrigger());
      mdTrigger.DaysOfWeek = DaysOfTheWeek.AllDays;
      mdTrigger.MonthsOfYear = MonthsOfTheYear.January | MonthsOfTheYear.December;
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) mdTrigger.RunOnLastWeekOfMonth = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
      mdTrigger.WeeksOfMonth = WhichWeek.FirstWeek;

      &lt;span style="color:Green;"&gt;// Create a trigger that fires 1 minute from now and then every 15 minutes for the next 7 days.&lt;/span&gt;
      TimeTrigger tTrigger = (TimeTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; TimeTrigger());
      tTrigger.StartBoundary = DateTime.Now + TimeSpan.FromMinutes(1);
      tTrigger.EndBoundary = DateTime.Today + TimeSpan.FromDays(7);
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) tTrigger.ExecutionTimeLimit = TimeSpan.FromSeconds(15);
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) tTrigger.Id = &lt;span style="color:#A31515;"&gt;&amp;quot;Time test&amp;quot;&lt;/span&gt;;
      tTrigger.Repetition.Duration = TimeSpan.FromMinutes(20);
      tTrigger.Repetition.Interval = TimeSpan.FromMinutes(15);
      tTrigger.Repetition.StopAtDurationEnd = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;

      &lt;span style="color:Green;"&gt;// Create a trigger that fires every third week on Monday&lt;/span&gt;
      WeeklyTrigger wTrigger = (WeeklyTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; WeeklyTrigger());
      wTrigger.DaysOfWeek = DaysOfTheWeek.Monday;
      wTrigger.WeeksInterval = 3;

      &lt;span style="color:Green;"&gt;// Create an action which opens a log file in notepad&lt;/span&gt;
      td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\\test.log&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;));
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer)
      {
         &lt;span style="color:Green;"&gt;// Create an action which shows a message to the interactive user&lt;/span&gt;
         td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ShowMessageAction(&lt;span style="color:#A31515;"&gt;&amp;quot;Running Notepad&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;Info&amp;quot;&lt;/span&gt;));
         &lt;span style="color:Green;"&gt;// Create an action which sends an email&lt;/span&gt;
         td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; EmailAction(&lt;span style="color:#A31515;"&gt;&amp;quot;Testing&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;dahall@codeplex.com&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;user@test.com&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;You&amp;#39;ve got mail.&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;mail.myisp.com&amp;quot;&lt;/span&gt;));
         &lt;span style="color:Green;"&gt;// Create an action which loads a COM object and calls the ITaskHandler interface&lt;/span&gt;
         td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ComHandlerAction(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; Guid(&lt;span style="color:#A31515;"&gt;&amp;quot;CE7D4428-8A77-4c5d-8A13-5CAB5D1EC734&amp;quot;&lt;/span&gt;), &lt;span style="color:Blue;"&gt;string&lt;/span&gt;.Empty));
      }

      &lt;span style="color:Green;"&gt;// Register the task definition (saves it) in the security context of the interactive user&lt;/span&gt;
      tf.RegisterTaskDefinition(&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;, td, TaskCreation.CreateOrUpdate, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;, TaskLogonType.InteractiveToken, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;);
   }
   &lt;span style="color:Blue;"&gt;catch&lt;/span&gt; (Exception ex)
   {
      Console.WriteLine(ex.ToString());
   }

   &lt;span style="color:Green;"&gt;// Display information about the newly created task&lt;/span&gt;
   Task runningTask = tf.Tasks[&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;];
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nNew task will run at &amp;quot;&lt;/span&gt; + runningTask.NextRunTime);
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nNew task triggers:&amp;quot;&lt;/span&gt;);
   &lt;span style="color:Blue;"&gt;for&lt;/span&gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; runningTask.Definition.Triggers.Count; i++)
      Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;  {0}: {1}&amp;quot;&lt;/span&gt;, i, runningTask.Definition.Triggers[i]);
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nNew task actions:&amp;quot;&lt;/span&gt;);
   &lt;span style="color:Blue;"&gt;for&lt;/span&gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; runningTask.Definition.Actions.Count; i++)
      Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;  {0}: {1}&amp;quot;&lt;/span&gt;, i, runningTask.Definition.Actions[i]);

   &lt;span style="color:Green;"&gt;// Remove the task we just created since this was just a test&lt;/span&gt;
   tf.DeleteTask(&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;);
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Task history example&lt;/b&gt;&lt;a name="history"&gt;&lt;/a&gt;&lt;br /&gt;Only works with release 1.6.2 or source code drop 66948 and later and requires the inclusion of the TaskSchedulerEditor assembly.&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
TaskEventLog log = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskEventLog(task.Path);
List&amp;lt;ListViewItem&amp;gt; c = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;ListViewItem&amp;gt;(100);
&lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (TaskEvent item &lt;span style="color:Blue;"&gt;in&lt;/span&gt; log)
   c.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ListViewItem(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; &lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] { item.Level, item.TimeCreated.ToString(), item.EventId.ToString(),
      item.TaskCategory, item.OpCode, item.ActivityId.ToString() }));
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>dahall</author><pubDate>Mon, 20 May 2013 15:47:12 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Examples 20130520034712P</guid></item><item><title>New Comment on "Examples"</title><link>https://taskscheduler.codeplex.com/wikipage?title=Examples&amp;ANCHOR#C27530</link><description>When i did tried to run the code getting error&amp;#58;&amp;#10;Error 3 &amp;#39;Action&amp;#39; is an ambiguous reference between &amp;#39;System.Action&amp;#39; and &amp;#39;Microsoft.Win32.TaskScheduler.Action&amp;#39;&amp;#10;&amp;#10;&amp;#10;Believe some reference is missing.Could you please let me know how to add that reference as i am not getting it neither .NET or in COM list.&amp;#10;&amp;#10;Thanks,&amp;#10;Sisir</description><author>sisir14</author><pubDate>Mon, 20 May 2013 08:43:17 GMT</pubDate><guid isPermaLink="false">New Comment on "Examples" 20130520084317A</guid></item><item><title>Updated Wiki: Documentation</title><link>http://taskscheduler.codeplex.com/documentation?version=16</link><description>&lt;div class="wikidoc"&gt;There is a help file included with the download that provides an overview of the various classes. The &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa446802(v=VS.85).aspx"&gt;Microsoft MSDN documentation&lt;/a&gt; provides an excellent overview of the Task Scheduler along with details around security and permission, idle conditions, and trigger repetition.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The &lt;a href="http://taskscheduler.codeplex.com/wikipage?title=Examples&amp;referringTitle=Documentation"&gt;Examples Page&lt;/a&gt; shows some C# code that demonstrates almost every function of the library.&lt;/li&gt;
&lt;li&gt;The &lt;a href="http://taskscheduler.codeplex.com/wikipage?title=Install&amp;referringTitle=Documentation"&gt;Installation Page&lt;/a&gt; explains how to use this library in your own projects and includes a sample project.&lt;/li&gt;&lt;/ul&gt;
The &lt;b&gt;&lt;span class="codeInline"&gt;TaskService&lt;/span&gt;&lt;/b&gt; class represents the machine specific instance of the system task scheduler. It provides access to information about the service, access folders (2.0 only), and can quickly add or retrieve a task. If you only need to use the library for very intermitant periods, wrap the TaskService instantiation in a &lt;i&gt;using&lt;/i&gt; statement to easily disconnect at the end of your use. However, if you plan on using the connection to the Task Scheduler repeatedly, use an assembly level field to store the TaskService instance as connecting and disconnecting is an expensive operation.&lt;br /&gt;&lt;br /&gt;Tasks are accessed and can be enumerated through a &lt;b&gt;&lt;span class="codeInline"&gt;TaskFolder&lt;/span&gt;&lt;/b&gt;. For systems supporting only the 1.0 library, there is only the root folder. The 2.0 library supports a hierarchal structure similar to a file system. The &lt;span class="codeInline"&gt;Tasks&lt;/span&gt; property exposes a &lt;b&gt;&lt;span class="codeInline"&gt;TaskCollection&lt;/span&gt;&lt;/b&gt; instance which can enumerate tasks and provides an indexer which allows access to individual tasks by name. The &lt;span class="codeInline"&gt;TaskCollection&lt;/span&gt; class also has methods that allow for the creation/registration and deletion of tasks and subfolders by name.&lt;br /&gt;&lt;br /&gt;A task is represented by a &lt;b&gt;&lt;span class="codeInline"&gt;Task&lt;/span&gt;&lt;/b&gt; instance. The Task class provides information about tasks state and history and exposes the task&amp;#39;s &lt;span class="codeInline"&gt;TaskDefinition&lt;/span&gt; through the &lt;span class="codeInline"&gt;Definition&lt;/span&gt; property.&lt;br /&gt;&lt;br /&gt;A &lt;b&gt;&lt;span class="codeInline"&gt;TaskDefinition&lt;/span&gt;&lt;/b&gt; exposes all of the properties of a task which allow you to define how and what will run when the task is triggered. A task must have at least one action and one trigger defined.&lt;br /&gt;&lt;br /&gt;Each task has a list of triggers that determine when the task will be run. These are accessed through the &lt;span class="codeInline"&gt;Triggers&lt;/span&gt; property of a task definition which exposes a &lt;span class="codeInline"&gt;TriggerCollection&lt;/span&gt; instance. &lt;span class="codeInline"&gt;TriggerCollection&lt;/span&gt; provides an indexer which allows access to individual triggers by their position in the list. The &lt;span class="codeInline"&gt;TriggerCollection&lt;/span&gt; class also has methods that allow for the addition and removal of triggers. &lt;span class="codeInline"&gt;TriggerCollection&lt;/span&gt; implements the IList interface so you can also enumerate all tasks using the foreach construct.&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;&lt;span class="codeInline"&gt;Trigger&lt;/span&gt;&lt;/b&gt; class is an abstract class that forms the foundation of the different types of triggers that can be specified for a task. There are 10 different specializations that provide different ways to specify the time a task will run. Not all specializations work with the 1.0 library. See the help file for details about each of the trigger classes. The &lt;a href="http://taskscheduler.codeplex.com/wikipage?title=TriggerSamples&amp;referringTitle=Documentation"&gt;Trigger Documentation&lt;/a&gt; has some examples of how to setup each kind of trigger.&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;&lt;span class="codeInline"&gt;Action&lt;/span&gt;&lt;/b&gt; class is an abstract class that is the foundation for four different actions. On 1.0, only the &lt;span class="codeInline"&gt;ExecAction&lt;/span&gt; specialization is available. These actions determine what the service will do when a trigger is fired. The &lt;a href="http://taskscheduler.codeplex.com/wikipage?title=ActionSamples&amp;referringTitle=Documentation"&gt;Action Documentation&lt;/a&gt; has some examples of how to setup each kind of action.&lt;br /&gt;&lt;br /&gt;Below is a brief example of how to use the library from C#.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; Microsoft.Win32.TaskScheduler;

&lt;span style="color:Blue;"&gt;class&lt;/span&gt; Program
{
   &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] args)
   {
      &lt;span style="color:Green;"&gt;// Get the service on the local machine&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;using&lt;/span&gt; (TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService())
      {
         &lt;span style="color:Green;"&gt;// Create a new task definition and assign properties&lt;/span&gt;
         TaskDefinition td = ts.NewTask();
         td.RegistrationInfo.Description = &lt;span style="color:#A31515;"&gt;&amp;quot;Does something&amp;quot;&lt;/span&gt;;

         &lt;span style="color:Green;"&gt;// Add a trigger that, starting tomorrow, will fire every other week on Monday&lt;/span&gt;
         &lt;span style="color:Green;"&gt;// and Saturday and repeat every 10 minutes for the following 11 hours&lt;/span&gt;
         WeeklyTrigger wt = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; WeeklyTrigger();
         wt.StartBoundary = DateTime.Today.AddDays(1);
         wt.DaysOfWeek = DaysOfTheWeek.Monday | DaysOfTheWeek.Saturday;
         wt.WeeksInterval = 2;
         wt.Repetition.Duration = TimeSpan.FromHours(11);
         wt.Repetition.Interval = TimeSpan.FromMinutes(10);
         td.Triggers.Add(wt)

         &lt;span style="color:Green;"&gt;// Create an action that will launch Notepad whenever the trigger fires&lt;/span&gt;
         td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\\test.log&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;));

         &lt;span style="color:Green;"&gt;// Register the task in the root folder&lt;/span&gt;
         ts.RootFolder.RegisterTaskDefinition(&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;, td);
      }
   }
}
&lt;/pre&gt;&lt;/div&gt;Here&amp;#39;s the same as above but in VB.NET&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;Imports&lt;/span&gt; Microsoft.Win32.TaskScheduler

&lt;span style="color:Blue;"&gt;Module&lt;/span&gt; Module1

    &lt;span style="color:Blue;"&gt;Sub&lt;/span&gt; Main()
        &lt;span style="color:Blue;"&gt;Using&lt;/span&gt; ts &lt;span style="color:Blue;"&gt;As&lt;/span&gt; &lt;span style="color:Blue;"&gt;New&lt;/span&gt; TaskService()
            &lt;span style="color:Green;"&gt;&amp;#39; Create a new task definition and assign properties&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;Dim&lt;/span&gt; td &lt;span style="color:Blue;"&gt;As&lt;/span&gt; TaskDefinition = ts.NewTask
            td.RegistrationInfo.Description = &lt;span style="color:#A31515;"&gt;&amp;quot;Does something&amp;quot;&lt;/span&gt;

            &lt;span style="color:Green;"&gt;&amp;#39; Add a trigger that will, starting tomorrow, fire every other week on Monday&lt;/span&gt;
            &lt;span style="color:Green;"&gt;&amp;#39; and Saturday and repeat every 10 minutes for the following 11 hours&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;Dim&lt;/span&gt; wt &lt;span style="color:Blue;"&gt;As&lt;/span&gt; &lt;span style="color:Blue;"&gt;New&lt;/span&gt; WeeklyTrigger()
            wt.StartBoundary = DateTime.Today.AddDays(1)
            wt.DaysOfWeek = DaysOfTheWeek.Monday &lt;span style="color:Blue;"&gt;Or&lt;/span&gt; DaysOfTheWeek.Saturday
            wt.WeeksInterval = 2
            wt.Repetition.Duration = TimeSpan.FromHours(11)
            wt.Repetition.Interval = TimeSpan.FromMinutes(10)
            td.Triggers.Add(wt)

            &lt;span style="color:Green;"&gt;&amp;#39; Add an action (shorthand) that runs Notepad&lt;/span&gt;
            td.Actions.Add(&lt;span style="color:Blue;"&gt;New&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\test.log&amp;quot;&lt;/span&gt;))

            &lt;span style="color:Green;"&gt;&amp;#39; Register the task in the root folder&lt;/span&gt;
            ts.RootFolder.RegisterTaskDefinition(&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;, td)
        &lt;span style="color:Blue;"&gt;End&lt;/span&gt; &lt;span style="color:Blue;"&gt;Using&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;End&lt;/span&gt; &lt;span style="color:Blue;"&gt;Sub&lt;/span&gt;

&lt;span style="color:Blue;"&gt;End&lt;/span&gt; &lt;span style="color:Blue;"&gt;Module&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;If you&amp;#39;re really into shorthand code, here&amp;#39;s almost the same functionality as the C# code above, but much shorter:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; Microsoft.Win32.TaskScheduler;

&lt;span style="color:Blue;"&gt;class&lt;/span&gt; Program
{
   &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] args)
   {
      &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService().AddTask(&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;new&lt;/span&gt; DailyTrigger { DaysInterval = 2 }, &lt;span style="color:Blue;"&gt;new&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\\test.log&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;));
   }
}
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>dahall</author><pubDate>Tue, 26 Feb 2013 00:46:22 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20130226124622A</guid></item><item><title>Updated Wiki: Documentation</title><link>http://taskscheduler.codeplex.com/documentation?version=15</link><description>&lt;div class="wikidoc"&gt;There is a help file included with the download that provides an overview of the various classes. The &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa446802(v=VS.85).aspx"&gt;Microsoft MSDN documentation&lt;/a&gt; provides an excellent overview of the Task Scheduler along with details around security and permission, idle conditions, and trigger repetition.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The &lt;a href="http://taskscheduler.codeplex.com/wikipage?title=Examples&amp;referringTitle=Documentation"&gt;Examples Page&lt;/a&gt; shows some C# code that demonstrates almost every function of the library.&lt;/li&gt;
&lt;li&gt;The &lt;a href="http://taskscheduler.codeplex.com/wikipage?title=Install&amp;referringTitle=Documentation"&gt;Installation Page&lt;/a&gt; explains how to use this library in your own projects and includes a sample project.&lt;/li&gt;&lt;/ul&gt;
The &lt;b&gt;&lt;span class="codeInline"&gt;TaskService&lt;/span&gt;&lt;/b&gt; class represents the machine specific instance of the system task scheduler. It provides access to information about the service, access folders (2.0 only), and can quickly add or retrieve a task. If you only need to use the library for very intermitant periods, wrap the TaskService instantiation in a &lt;i&gt;using&lt;/i&gt; statement to easily disconnect at the end of your use. However, if you plan on using the connection to the Task Scheduler repeatedly, use an assembly level field to store the TaskService instance as connecting and disconnecting is an expensive operation.&lt;br /&gt;&lt;br /&gt;Tasks are accessed and can be enumerated through a &lt;b&gt;&lt;span class="codeInline"&gt;TaskFolder&lt;/span&gt;&lt;/b&gt;. For systems supporting only the 1.0 library, there is only the root folder. The 2.0 library supports a hierarchal structure similar to a file system. The &lt;span class="codeInline"&gt;Tasks&lt;/span&gt; property exposes a &lt;b&gt;&lt;span class="codeInline"&gt;TaskCollection&lt;/span&gt;&lt;/b&gt; instance which can enumerate tasks and provides an indexer which allows access to individual tasks by name. The &lt;span class="codeInline"&gt;TaskCollection&lt;/span&gt; class also has methods that allow for the creation/registration and deletion of tasks and subfolders by name.&lt;br /&gt;&lt;br /&gt;A task is represented by a &lt;b&gt;&lt;span class="codeInline"&gt;Task&lt;/span&gt;&lt;/b&gt; instance. The Task class provides information about tasks state and history and exposes the task&amp;#39;s &lt;span class="codeInline"&gt;TaskDefinition&lt;/span&gt; through the &lt;span class="codeInline"&gt;Definition&lt;/span&gt; property.&lt;br /&gt;&lt;br /&gt;A &lt;b&gt;&lt;span class="codeInline"&gt;TaskDefinition&lt;/span&gt;&lt;/b&gt; exposes all of the properties of a task which allow you to define how and what will run when the task is triggered. A task must have at least one action and one trigger defined.&lt;br /&gt;&lt;br /&gt;Each task has a list of triggers that determine when the task will be run. These are accessed through the &lt;span class="codeInline"&gt;Triggers&lt;/span&gt; property of a task definition which exposes a &lt;span class="codeInline"&gt;TriggerCollection&lt;/span&gt; instance. &lt;span class="codeInline"&gt;TriggerCollection&lt;/span&gt; provides an indexer which allows access to individual triggers by their position in the list. The &lt;span class="codeInline"&gt;TriggerCollection&lt;/span&gt; class also has methods that allow for the addition and removal of triggers. &lt;span class="codeInline"&gt;TriggerCollection&lt;/span&gt; implements the IList interface so you can also enumerate all tasks using the foreach construct.&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;&lt;span class="codeInline"&gt;Trigger&lt;/span&gt;&lt;/b&gt; class is an abstract class that forms the foundation of the different types of triggers that can be specified for a task. There are 10 different specializations that provide different ways to specify the time a task will run. Not all specializations work with the 1.0 library. See the help file for details about each of the trigger classes. The &lt;a href="http://taskscheduler.codeplex.com/wikipage?title=TriggerSamples&amp;referringTitle=Documentation"&gt;Trigger Documentation&lt;/a&gt; has some examples of how to setup each kind of trigger.&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;&lt;span class="codeInline"&gt;Action&lt;/span&gt;&lt;/b&gt; class is an abstract class that is the foundation for four different actions. On 1.0, only the &lt;span class="codeInline"&gt;ExecAction&lt;/span&gt; specialization is available. These actions determine what the service will do when a trigger is fired. The &lt;a href="http://taskscheduler.codeplex.com/wikipage?title=ActionSamples&amp;referringTitle=Documentation"&gt;Action Documentation&lt;/a&gt; has some examples of how to setup each kind of action.&lt;br /&gt;&lt;br /&gt;Below is a brief example of how to use the library from C#.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; Microsoft.Win32.TaskScheduler;

&lt;span style="color:Blue;"&gt;class&lt;/span&gt; Program
{
   &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] args)
   {
      &lt;span style="color:Green;"&gt;// Get the service on the local machine&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;using&lt;/span&gt; (TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService())
      {
         &lt;span style="color:Green;"&gt;// Create a new task definition and assign properties&lt;/span&gt;
         TaskDefinition td = ts.NewTask();
         td.RegistrationInfo.Description = &lt;span style="color:#A31515;"&gt;&amp;quot;Does something&amp;quot;&lt;/span&gt;;

         &lt;span style="color:Green;"&gt;// Add a trigger that will fire every other week on Monday and Saturday and&lt;/span&gt;
         &lt;span style="color:Green;"&gt;// repeat every 10 minutes for the following 11 hours&lt;/span&gt;
         WeeklyTrigger wt = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; WeeklyTrigger(DaysOfTheWeek.Monday | DaysOfTheWeek.Saturday, 2);
         wt.Repetition.Duration = TimeSpan.FromHours(11)
         wt.Repetition.Interval = TimeSpan.FromMinutes(10)
         td.Triggers.Add(wt)

         &lt;span style="color:Green;"&gt;// Create an action that will launch Notepad whenever the trigger fires&lt;/span&gt;
         td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\\test.log&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;));

         &lt;span style="color:Green;"&gt;// Register the task in the root folder&lt;/span&gt;
         ts.RootFolder.RegisterTaskDefinition(&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;, td);
      }
   }
}
&lt;/pre&gt;&lt;/div&gt;Here&amp;#39;s the same as above but in VB.NET&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;Imports&lt;/span&gt; Microsoft.Win32.TaskScheduler

&lt;span style="color:Blue;"&gt;Module&lt;/span&gt; Module1

    &lt;span style="color:Blue;"&gt;Sub&lt;/span&gt; Main()
        &lt;span style="color:Blue;"&gt;Using&lt;/span&gt; ts &lt;span style="color:Blue;"&gt;As&lt;/span&gt; &lt;span style="color:Blue;"&gt;New&lt;/span&gt; TaskService()
            &lt;span style="color:Green;"&gt;&amp;#39; Create a new task definition and assign properties&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;Dim&lt;/span&gt; td &lt;span style="color:Blue;"&gt;As&lt;/span&gt; TaskDefinition = ts.NewTask
            td.RegistrationInfo.Description = &lt;span style="color:#A31515;"&gt;&amp;quot;Does something&amp;quot;&lt;/span&gt;

            &lt;span style="color:Green;"&gt;&amp;#39; Add a trigger that will fire every other week on Monday and Saturday and&lt;/span&gt;
            &lt;span style="color:Green;"&gt;&amp;#39; repeat every 10 minutes for the following 11 hours&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;Dim&lt;/span&gt; wt &lt;span style="color:Blue;"&gt;As&lt;/span&gt; &lt;span style="color:Blue;"&gt;New&lt;/span&gt; WeeklyTrigger(DaysOfTheWeek.Monday &lt;span style="color:Blue;"&gt;Or&lt;/span&gt; DaysOfTheWeek.Saturday, 2)
            wt.Repetition.Duration = TimeSpan.FromHours(11)
            wt.Repetition.Interval = TimeSpan.FromMinutes(10)
            td.Triggers.Add(wt)

            &lt;span style="color:Green;"&gt;&amp;#39; Add an action (shorthand) that runs Notepad&lt;/span&gt;
            td.Actions.Add(&lt;span style="color:Blue;"&gt;New&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;C:\Test.log&amp;quot;&lt;/span&gt;))

            &lt;span style="color:Green;"&gt;&amp;#39; Register the task in the root folder&lt;/span&gt;
            ts.RootFolder.RegisterTaskDefinition(&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;, td)
        &lt;span style="color:Blue;"&gt;End&lt;/span&gt; &lt;span style="color:Blue;"&gt;Using&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;End&lt;/span&gt; &lt;span style="color:Blue;"&gt;Sub&lt;/span&gt;

&lt;span style="color:Blue;"&gt;End&lt;/span&gt; &lt;span style="color:Blue;"&gt;Module&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;If you&amp;#39;re really into shorthand code, here&amp;#39;s almost the same functionality as the C# code above, but much shorter:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; Microsoft.Win32.TaskScheduler;

&lt;span style="color:Blue;"&gt;class&lt;/span&gt; Program
{
   &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] args)
   {
      &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService().AddTask(&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;new&lt;/span&gt; DailyTrigger { DaysInterval = 2 }, &lt;span style="color:Blue;"&gt;new&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\\test.log&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;));
   }
}
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>dahall</author><pubDate>Tue, 26 Feb 2013 00:40:03 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20130226124003A</guid></item><item><title>Updated Wiki: Examples</title><link>http://taskscheduler.codeplex.com/wikipage?title=Examples&amp;version=10</link><description>&lt;div class="wikidoc"&gt;Below are some examples of how to use most of the functions of the library:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="#remote"&gt;Connecting to a remove server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#editor"&gt;Using the editor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#simple"&gt;Simple example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#enum"&gt;Enumerate all tasks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#complex"&gt;Complex example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#history"&gt;Task history example&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;You can also go to these pages for more sample code:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://taskscheduler.codeplex.com/wikipage?title=TriggerSamples&amp;referringTitle=Examples"&gt;Trigger Example Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://taskscheduler.codeplex.com/wikipage?title=ActionSamples&amp;referringTitle=Examples"&gt;Action Example Code&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;Connecting to a remote server&lt;/b&gt;&lt;a name="remote"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Connect to the computer &amp;quot;REMOTE&amp;quot; using credentials&lt;/span&gt;
TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService(&lt;span style="color:#A31515;"&gt;&amp;quot;\\REMOTE&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;myusername&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;MYDOMAIN&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;mypassword&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Using the editor&lt;/b&gt;&lt;a name="editor"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Get the service on the local machine&lt;/span&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; (TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService())
{
   &lt;span style="color:Green;"&gt;// Create a new task&lt;/span&gt;
   &lt;span style="color:Blue;"&gt;const&lt;/span&gt; &lt;span style="color:Blue;"&gt;string&lt;/span&gt; taskName = &lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;;
   Task t = ts.AddTask(taskName, 
      &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TimeTrigger() { StartBoundary = DateTime.Now + TimeSpan.FromHours(1), Enabled = &lt;span style="color:Blue;"&gt;false&lt;/span&gt; },
      &lt;span style="color:Blue;"&gt;new&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\\test.log&amp;quot;&lt;/span&gt;, &amp;quot;C:\\&amp;quot;));

   &lt;span style="color:Green;"&gt;// Edit task and re-register if user clicks Ok&lt;/span&gt;
   TaskEditDialog editorForm = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskEditDialog();
   editorForm.Editable = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
   editorForm.RegisterTaskOnAccept = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
   editorForm.Initialize(t);
   &lt;span style="color:Green;"&gt;// ** The four lines above can be replaced by using the full constructor -- TaskEditDialog(t, true, true)&lt;/span&gt;
   editorForm.ShowDialog();

   &lt;span style="color:Green;"&gt;// Remove the task we just created&lt;/span&gt;
   ts.RootFolder.DeleteTask(taskName);
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Simple example&lt;/b&gt;&lt;a name="simple"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Get the service on the local machine&lt;/span&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; (TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService())
{
   &lt;span style="color:Green;"&gt;// Create a new task definition and assign properties&lt;/span&gt;
   TaskDefinition td = ts.NewTask();
   td.RegistrationInfo.Description = &lt;span style="color:#A31515;"&gt;&amp;quot;Does something&amp;quot;&lt;/span&gt;;
   td.Principal.LogonType = TaskLogonType.InteractiveToken;

   &lt;span style="color:Green;"&gt;// Add a trigger that will fire the task at this time every other day&lt;/span&gt;
   DailyTrigger dt = (DailyTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; DailyTrigger { DaysInterval = 2 });
   dt.Repetition.Duration = TimeSpan.FromHours(4);
   dt.Repetition.Interval = TimeSpan.FromHours(1);

   &lt;span style="color:Green;"&gt;// Add a trigger that will fire every week on Friday&lt;/span&gt;
   td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; WeeklyTrigger { StartBoundary = DateTime.Today + TimeSpan.FromHours(2), DaysOfWeek = DaysOfTheWeek.Friday });

   &lt;span style="color:Green;"&gt;// Add an action that will launch Notepad whenever the trigger fires&lt;/span&gt;
   td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\\test.log&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;));

   &lt;span style="color:Green;"&gt;// Register the task in the root folder&lt;/span&gt;
   &lt;span style="color:Blue;"&gt;const&lt;/span&gt; &lt;span style="color:Blue;"&gt;string&lt;/span&gt; taskName = &lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;;
   ts.RootFolder.RegisterTaskDefinition(taskName, td);

   &lt;span style="color:Green;"&gt;// Retrieve the task, change the trigger and re-register it&lt;/span&gt;
   Task t = ts.GetTask(taskName);
   td = t.Definition;
   td.Triggers[0].StartBoundary = DateTime.Today + TimeSpan.FromDays(7);
   ts.RootFolder.RegisterTaskDefinition(taskName, td);

   &lt;span style="color:Green;"&gt;// Remove the task we just created&lt;/span&gt;
   ts.RootFolder.DeleteTask(taskName);
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Enumerate all tasks&lt;/b&gt;&lt;a name="enum"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;void&lt;/span&gt; EnumAllTasks()
{
   &lt;span style="color:Blue;"&gt;using&lt;/span&gt; (TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService())
      EnumFolderTasks(ts.RootFolder);
}

&lt;span style="color:Blue;"&gt;void&lt;/span&gt; EnumFolderTasks(TaskFolder fld)
{
   &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (Task task &lt;span style="color:Blue;"&gt;in&lt;/span&gt; fld.Tasks)
      ActOnTask(task);
   &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (TaskFolder sfld &lt;span style="color:Blue;"&gt;in&lt;/span&gt; fld.SubFolders)
      EnumFolderTasks(sfld);
}

&lt;span style="color:Blue;"&gt;void&lt;/span&gt; ActOnTask(Task t)
{
   &lt;span style="color:Green;"&gt;// Do something interesting here&lt;/span&gt;
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Complex example&lt;/b&gt;&lt;a name="complex"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;string&lt;/span&gt; user = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; preWin7 = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;

&lt;span style="color:Green;"&gt;// Get the service on the local machine&lt;/span&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; (TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService())
{
   &lt;span style="color:Green;"&gt;// Display version and server state&lt;/span&gt;
   Version ver = ts.HighestSupportedVersion;
   &lt;span style="color:Blue;"&gt;bool&lt;/span&gt; newVer = (ver &amp;gt;= &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Version(1, 2));
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Highest version: &amp;quot;&lt;/span&gt; + ver);
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Server: {0} ({1})&amp;quot;&lt;/span&gt;, ts.TargetServer, ts.Connected ? &lt;span style="color:#A31515;"&gt;&amp;quot;Connected&amp;quot;&lt;/span&gt; : &lt;span style="color:#A31515;"&gt;&amp;quot;Disconnected&amp;quot;&lt;/span&gt;);

   &lt;span style="color:Green;"&gt;// Output all of the running tasks&lt;/span&gt;
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Running tasks:&amp;quot;&lt;/span&gt;);
   &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (RunningTask rt &lt;span style="color:Blue;"&gt;in&lt;/span&gt; ts.GetRunningTasks(&lt;span style="color:Blue;"&gt;true&lt;/span&gt;))
   {
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (rt != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
      {
         Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;+ {0}, {1} ({2})&amp;quot;&lt;/span&gt;, rt.Name, rt.Path, rt.State);
         &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (ver.Minor &amp;gt; 0)
            Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;  Current Action: &amp;quot;&lt;/span&gt; + rt.CurrentAction);
      }
   }

   &lt;span style="color:Green;"&gt;// Output all the tasks in the root folder with their triggers and actions&lt;/span&gt;
   TaskFolder tf = ts.RootFolder;
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nRoot folder tasks ({0}):&amp;quot;&lt;/span&gt;, tf.Tasks.Count);
   &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (Task t &lt;span style="color:Blue;"&gt;in&lt;/span&gt; tf.Tasks)
   {
      &lt;span style="color:Blue;"&gt;try&lt;/span&gt;
      {
         Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;+ {0}, {1} ({2})&amp;quot;&lt;/span&gt;, t.Name, t.Definition.RegistrationInfo.Author, t.State);
         &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (Trigger trg &lt;span style="color:Blue;"&gt;in&lt;/span&gt; t.Definition.Triggers)
            Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot; + {0}&amp;quot;&lt;/span&gt;, trg);
         &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (Action act &lt;span style="color:Blue;"&gt;in&lt;/span&gt; t.Definition.Actions)
            Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot; = {0}&amp;quot;&lt;/span&gt;, act);
      }
      &lt;span style="color:Blue;"&gt;catch&lt;/span&gt; { }
   }

   &lt;span style="color:Green;"&gt;// Output an enumeration of all folders under the root&lt;/span&gt;
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\n***Checking folder enum***&amp;quot;&lt;/span&gt;);
   TaskFolderCollection tfs = tf.SubFolders;
   &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (tfs.Count &amp;gt; 0)
   {
      Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nSub folders:&amp;quot;&lt;/span&gt;);
      &lt;span style="color:Blue;"&gt;try&lt;/span&gt;
      {
         &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (TaskFolder sf &lt;span style="color:Blue;"&gt;in&lt;/span&gt; tfs)
            Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;+ {0}&amp;quot;&lt;/span&gt;, sf.Path);
      }
      &lt;span style="color:Blue;"&gt;catch&lt;/span&gt; (Exception ex)
      {
         Console.WriteLine(ex.ToString());
      }
   }

   &lt;span style="color:Green;"&gt;// Display information about the Microsoft folder&lt;/span&gt;
   &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer)
   {
      Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\n***Checking folder retrieval***&amp;quot;&lt;/span&gt;);
      &lt;span style="color:Blue;"&gt;try&lt;/span&gt;
      {
         TaskFolder sub = tf.SubFolders[&lt;span style="color:#A31515;"&gt;&amp;quot;Microsoft&amp;quot;&lt;/span&gt;];
         Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nSubfolder path: &amp;quot;&lt;/span&gt; + sub.Path);
      }
      &lt;span style="color:Blue;"&gt;catch&lt;/span&gt; (NotSupportedException) { }
      &lt;span style="color:Blue;"&gt;catch&lt;/span&gt; (Exception ex)
      {
         Console.WriteLine(ex.ToString());
      }
   }

   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\n***Checking task creation***&amp;quot;&lt;/span&gt;);
   &lt;span style="color:Blue;"&gt;try&lt;/span&gt;
   {
      &lt;span style="color:Green;"&gt;// Create a new task definition and assign properties&lt;/span&gt;
      TaskDefinition td = ts.NewTask();
      td.Data = &lt;span style="color:#A31515;"&gt;&amp;quot;Your data&amp;quot;&lt;/span&gt;;
      td.Principal.UserId = user;
      td.Principal.LogonType = TaskLogonType.InteractiveToken;
      td.RegistrationInfo.Author = &lt;span style="color:#A31515;"&gt;&amp;quot;dahall&amp;quot;&lt;/span&gt;;
      td.RegistrationInfo.Description = &lt;span style="color:#A31515;"&gt;&amp;quot;Does something&amp;quot;&lt;/span&gt;;
      td.RegistrationInfo.Documentation = &lt;span style="color:#A31515;"&gt;&amp;quot;Don&amp;#39;t pretend this is real.&amp;quot;&lt;/span&gt;;
      td.Settings.DisallowStartIfOnBatteries = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
      td.Settings.Enabled = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.ExecutionTimeLimit = TimeSpan.FromHours(2);
      td.Settings.Hidden = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.IdleSettings.IdleDuration = TimeSpan.FromMinutes(20);
      td.Settings.IdleSettings.RestartOnIdle = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.IdleSettings.StopOnIdleEnd = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.IdleSettings.WaitTimeout = TimeSpan.FromMinutes(10);
      td.Settings.Priority = System.Diagnostics.ProcessPriorityClass.Normal;
      td.Settings.RunOnlyIfIdle = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.RunOnlyIfNetworkAvailable = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.StopIfGoingOnBatteries = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer)
      {
         td.Principal.RunLevel = TaskRunLevel.Highest; &lt;span style="color:Green;"&gt;//.LUA;&lt;/span&gt;
         &lt;span style="color:Green;"&gt;//td.RegistrationInfo.SecurityDescriptorSddlForm = &amp;quot;O:COG:CGD::(A;;RPWPCCDCLCSWRCWDWOGA;;;S-1-0-0)&amp;quot;;&lt;/span&gt;
         td.RegistrationInfo.Source = &lt;span style="color:#A31515;"&gt;&amp;quot;Test App&amp;quot;&lt;/span&gt;;
         td.RegistrationInfo.URI = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Uri(&lt;span style="color:#A31515;"&gt;&amp;quot;test://app&amp;quot;&lt;/span&gt;);
         td.RegistrationInfo.Version = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Version(0, 9);
         td.Settings.AllowDemandStart = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
         td.Settings.AllowHardTerminate = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
         td.Settings.Compatibility = TaskCompatibility.V2;
         td.Settings.DeleteExpiredTaskAfter = TimeSpan.FromMinutes(1);
         td.Settings.MultipleInstances = TaskInstancesPolicy.StopExisting;
         td.Settings.StartWhenAvailable = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
         td.Settings.WakeToRun = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
         td.Settings.RestartCount = 5;
         td.Settings.RestartInterval = TimeSpan.FromSeconds(100);
      }

      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (preWin7)
      {
         &lt;span style="color:Green;"&gt;// Create a trigger that fires 5 minutes after the system is booted&lt;/span&gt;
         BootTrigger bTrigger = (BootTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; BootTrigger { Enabled = &lt;span style="color:Blue;"&gt;false&lt;/span&gt; });
         &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) bTrigger.Delay = TimeSpan.FromMinutes(5);
      }

      &lt;span style="color:Green;"&gt;// Create a trigger that fires every other day randomly between 6:00 a.m. and 8:00 a.m.&lt;/span&gt;
      DailyTrigger dTrigger = (DailyTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; DailyTrigger());
      dTrigger.StartBoundary = DateTime.Today + TimeSpan.FromHours(6);
      dTrigger.DaysInterval = 2;
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) dTrigger.RandomDelay = TimeSpan.FromHours(2);

      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer)
      {
         &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (preWin7)
         {
            &lt;span style="color:Green;"&gt;// Create a trigger that will fire on a system security event&lt;/span&gt;
            EventTrigger eTrigger = (EventTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; EventTrigger());
            eTrigger.SetBasic(&lt;span style="color:#A31515;"&gt;&amp;quot;Security&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;VSSAudit&amp;quot;&lt;/span&gt;, 25);
            eTrigger.ValueQueries.Add(&lt;span style="color:#A31515;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;Value&amp;quot;&lt;/span&gt;);
         }

         &lt;span style="color:Green;"&gt;// Create a trigger that fires 5 minutes after this task is registered&lt;/span&gt;
         td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; RegistrationTrigger { Delay = TimeSpan.FromMinutes(5) });

         &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (preWin7)
         {
            &lt;span style="color:Green;"&gt;// Create triggers that fire after various system states are changed&lt;/span&gt;
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.ConsoleConnect, UserId = user });
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.ConsoleDisconnect });
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.RemoteConnect });
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.RemoteDisconnect });
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.SessionLock, UserId = user });
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.SessionUnlock });
         }
      }

      &lt;span style="color:Green;"&gt;// Create a trigger that fires when the system is idle&lt;/span&gt;
      td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; IdleTrigger());

      &lt;span style="color:Green;"&gt;// Create a trigger that fires 15 minutes after the current user logs on and then every 1000 seconds after that&lt;/span&gt;
      LogonTrigger lTrigger = (LogonTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; LogonTrigger());
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer)
      {
         lTrigger.Delay = TimeSpan.FromMinutes(15);
         lTrigger.UserId = user;
         lTrigger.Repetition.Interval = TimeSpan.FromSeconds(1000);
      }

      &lt;span style="color:Green;"&gt;// Create a trigger that fires on the 3rd, 6th, 10th, 18th, and last days of July and November and stops triggering 90 days from now&lt;/span&gt;
      MonthlyTrigger mTrigger = (MonthlyTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MonthlyTrigger());
      mTrigger.DaysOfMonth = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; &lt;span style="color:Blue;"&gt;int&lt;/span&gt;[] { 3, 6, 10, 18 };
      mTrigger.MonthsOfYear = MonthsOfTheYear.July | MonthsOfTheYear.November;
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) mTrigger.RunOnLastDayOfMonth = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
      mTrigger.EndBoundary = DateTime.Today + TimeSpan.FromDays(90);

      &lt;span style="color:Green;"&gt;// Create a trigger that fires every day of the first and last week of December and January&lt;/span&gt;
      MonthlyDOWTrigger mdTrigger = (MonthlyDOWTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MonthlyDOWTrigger());
      mdTrigger.DaysOfWeek = DaysOfTheWeek.AllDays;
      mdTrigger.MonthsOfYear = MonthsOfTheYear.January | MonthsOfTheYear.December;
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) mdTrigger.RunOnLastWeekOfMonth = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
      mdTrigger.WeeksOfMonth = WhichWeek.FirstWeek;

      &lt;span style="color:Green;"&gt;// Create a trigger that fires 1 minute from now and then every 15 minutes for the next 7 days.&lt;/span&gt;
      TimeTrigger tTrigger = (TimeTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; TimeTrigger());
      tTrigger.StartBoundary = DateTime.Now + TimeSpan.FromMinutes(1);
      tTrigger.EndBoundary = DateTime.Today + TimeSpan.FromDays(7);
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) tTrigger.ExecutionTimeLimit = TimeSpan.FromSeconds(15);
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) tTrigger.Id = &lt;span style="color:#A31515;"&gt;&amp;quot;Time test&amp;quot;&lt;/span&gt;;
      tTrigger.Repetition.Duration = TimeSpan.FromMinutes(20);
      tTrigger.Repetition.Interval = TimeSpan.FromMinutes(15);
      tTrigger.Repetition.StopAtDurationEnd = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;

      &lt;span style="color:Green;"&gt;// Create a trigger that fires every third week on Monday&lt;/span&gt;
      WeeklyTrigger wTrigger = (WeeklyTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; WeeklyTrigger());
      wTrigger.DaysOfWeek = DaysOfTheWeek.Monday;
      wTrigger.WeeksInterval = 3;

      &lt;span style="color:Green;"&gt;// Create an action which opens a log file in notepad&lt;/span&gt;
      td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\\test.log&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;));
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer)
      {
         &lt;span style="color:Green;"&gt;// Create an action which shows a message to the interactive user&lt;/span&gt;
         td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ShowMessageAction(&lt;span style="color:#A31515;"&gt;&amp;quot;Running Notepad&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;Info&amp;quot;&lt;/span&gt;));
         &lt;span style="color:Green;"&gt;// Create an action which sends an email&lt;/span&gt;
         td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; EmailAction(&lt;span style="color:#A31515;"&gt;&amp;quot;Testing&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;dahall@codeplex.com&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;user@test.com&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;You&amp;#39;ve got mail.&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;mail.myisp.com&amp;quot;&lt;/span&gt;));
         &lt;span style="color:Green;"&gt;// Create an action which loads a COM object and calls the ITaskHandler interface&lt;/span&gt;
         td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ComHandlerAction(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; Guid(&lt;span style="color:#A31515;"&gt;&amp;quot;CE7D4428-8A77-4c5d-8A13-5CAB5D1EC734&amp;quot;&lt;/span&gt;), &lt;span style="color:Blue;"&gt;string&lt;/span&gt;.Empty));
      }

      &lt;span style="color:Green;"&gt;// Register the task definition (saves it) in the security context of the interactive user&lt;/span&gt;
      tf.RegisterTaskDefinition(&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;, td, TaskCreation.CreateOrUpdate, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;, TaskLogonType.InteractiveToken, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;);
   }
   &lt;span style="color:Blue;"&gt;catch&lt;/span&gt; (Exception ex)
   {
      Console.WriteLine(ex.ToString());
   }

   &lt;span style="color:Green;"&gt;// Display information about the newly created task&lt;/span&gt;
   Task runningTask = tf.Tasks[&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;];
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nNew task will run at &amp;quot;&lt;/span&gt; + runningTask.NextRunTime);
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nNew task triggers:&amp;quot;&lt;/span&gt;);
   &lt;span style="color:Blue;"&gt;for&lt;/span&gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; runningTask.Definition.Triggers.Count; i++)
      Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;  {0}: {1}&amp;quot;&lt;/span&gt;, i, runningTask.Definition.Triggers[i]);
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nNew task actions:&amp;quot;&lt;/span&gt;);
   &lt;span style="color:Blue;"&gt;for&lt;/span&gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; runningTask.Definition.Actions.Count; i++)
      Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;  {0}: {1}&amp;quot;&lt;/span&gt;, i, runningTask.Definition.Actions[i]);

   &lt;span style="color:Green;"&gt;// Remove the task we just created since this was just a test&lt;/span&gt;
   tf.DeleteTask(&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;);
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Task history example&lt;/b&gt;&lt;a name="history"&gt;&lt;/a&gt;&lt;br /&gt;Only works with release 1.6.2 or source code drop 66948 and later and requires the inclusion of the TaskSchedulerEditor assembly.&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
TaskEventLog log = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskEventLog(task.Path);
List&amp;lt;ListViewItem&amp;gt; c = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;ListViewItem&amp;gt;(100);
&lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (TaskEvent item &lt;span style="color:Blue;"&gt;in&lt;/span&gt; log)
   c.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ListViewItem(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; &lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] { item.Level, item.TimeCreated.ToString(), item.EventId.ToString(),
      item.TaskCategory, item.OpCode, item.ActivityId.ToString() }));
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>dahall</author><pubDate>Tue, 19 Feb 2013 17:52:31 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Examples 20130219055231P</guid></item><item><title>New Comment on "Examples"</title><link>http://taskscheduler.codeplex.com/wikipage?title=Examples&amp;ANCHOR#C26594</link><description>&amp;#62;&amp;#62;Chizl&amp;#58; You can find an exampe at http&amp;#58;&amp;#47;&amp;#47;taskscheduler.codeplex.com&amp;#47;discussions&amp;#47;433076 for something very similar. You will use the DailyTrigger with a repetition interval and duration defined.</description><author>dahall</author><pubDate>Tue, 19 Feb 2013 01:06:40 GMT</pubDate><guid isPermaLink="false">New Comment on "Examples" 20130219010640A</guid></item><item><title>New Comment on "Examples"</title><link>http://taskscheduler.codeplex.com/wikipage?title=Examples&amp;ANCHOR#C26583</link><description>There is so much here I&amp;#39;m having trouble finding the simple things.   How do I schedule something to run every 10 minutes all day every day&amp;#63;</description><author>Chizl</author><pubDate>Mon, 18 Feb 2013 00:31:03 GMT</pubDate><guid isPermaLink="false">New Comment on "Examples" 20130218123103A</guid></item><item><title>New Comment on "Documentation"</title><link>http://taskscheduler.codeplex.com/documentation?&amp;ANCHOR#C25771</link><description>is there a way to load a XML with a task definition and register the task definition&amp;#63;</description><author>tmatute</author><pubDate>Fri, 30 Nov 2012 19:13:41 GMT</pubDate><guid isPermaLink="false">New Comment on "Documentation" 20121130071341P</guid></item><item><title>Updated Wiki: Examples</title><link>http://taskscheduler.codeplex.com/wikipage?title=Examples&amp;version=9</link><description>&lt;div class="wikidoc"&gt;Below are some examples of how to use most of the functions of the library:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="#remote"&gt;Connecting to a remove server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#editor"&gt;Using the editor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#simple"&gt;Simple example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#enum"&gt;Enumerate all tasks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#complex"&gt;Complex example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#history"&gt;Task history example&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;Connecting to a remote server&lt;/b&gt;&lt;a name="remote"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Connect to the computer &amp;quot;REMOTE&amp;quot; using credentials&lt;/span&gt;
TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService(&lt;span style="color:#A31515;"&gt;&amp;quot;\\REMOTE&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;myusername&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;MYDOMAIN&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;mypassword&amp;quot;&lt;/span&gt;);
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Using the editor&lt;/b&gt;&lt;a name="editor"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Get the service on the local machine&lt;/span&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; (TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService())
{
   &lt;span style="color:Green;"&gt;// Create a new task&lt;/span&gt;
   &lt;span style="color:Blue;"&gt;const&lt;/span&gt; &lt;span style="color:Blue;"&gt;string&lt;/span&gt; taskName = &lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;;
   Task t = ts.AddTask(taskName, 
      &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TimeTrigger() { StartBoundary = DateTime.Now + TimeSpan.FromHours(1), Enabled = &lt;span style="color:Blue;"&gt;false&lt;/span&gt; },
      &lt;span style="color:Blue;"&gt;new&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\\test.log&amp;quot;&lt;/span&gt;, &amp;quot;C:\\&amp;quot;));

   &lt;span style="color:Green;"&gt;// Edit task and re-register if user clicks Ok&lt;/span&gt;
   TaskEditDialog editorForm = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskEditDialog();
   editorForm.Editable = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
   editorForm.RegisterTaskOnAccept = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
   editorForm.Initialize(t);
   &lt;span style="color:Green;"&gt;// ** The four lines above can be replaced by using the full constructor -- TaskEditDialog(t, true, true)&lt;/span&gt;
   editorForm.ShowDialog();

   &lt;span style="color:Green;"&gt;// Remove the task we just created&lt;/span&gt;
   ts.RootFolder.DeleteTask(taskName);
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Simple example&lt;/b&gt;&lt;a name="simple"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Get the service on the local machine&lt;/span&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; (TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService())
{
   &lt;span style="color:Green;"&gt;// Create a new task definition and assign properties&lt;/span&gt;
   TaskDefinition td = ts.NewTask();
   td.RegistrationInfo.Description = &lt;span style="color:#A31515;"&gt;&amp;quot;Does something&amp;quot;&lt;/span&gt;;
   td.Principal.LogonType = TaskLogonType.InteractiveToken;

   &lt;span style="color:Green;"&gt;// Add a trigger that will fire the task at this time every other day&lt;/span&gt;
   DailyTrigger dt = (DailyTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; DailyTrigger { DaysInterval = 2 });
   dt.Repetition.Duration = TimeSpan.FromHours(4);
   dt.Repetition.Interval = TimeSpan.FromHours(1);

   &lt;span style="color:Green;"&gt;// Add a trigger that will fire every week on Friday&lt;/span&gt;
   td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; WeeklyTrigger { StartBoundary = DateTime.Today + TimeSpan.FromHours(2), DaysOfWeek = DaysOfTheWeek.Friday });

   &lt;span style="color:Green;"&gt;// Add an action that will launch Notepad whenever the trigger fires&lt;/span&gt;
   td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\\test.log&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;));

   &lt;span style="color:Green;"&gt;// Register the task in the root folder&lt;/span&gt;
   &lt;span style="color:Blue;"&gt;const&lt;/span&gt; &lt;span style="color:Blue;"&gt;string&lt;/span&gt; taskName = &lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;;
   ts.RootFolder.RegisterTaskDefinition(taskName, td);

   &lt;span style="color:Green;"&gt;// Retrieve the task, change the trigger and re-register it&lt;/span&gt;
   Task t = ts.GetTask(taskName);
   td = t.Definition;
   td.Triggers[0].StartBoundary = DateTime.Today + TimeSpan.FromDays(7);
   ts.RootFolder.RegisterTaskDefinition(taskName, td);

   &lt;span style="color:Green;"&gt;// Remove the task we just created&lt;/span&gt;
   ts.RootFolder.DeleteTask(taskName);
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Enumerate all tasks&lt;/b&gt;&lt;a name="enum"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;void&lt;/span&gt; EnumAllTasks()
{
   &lt;span style="color:Blue;"&gt;using&lt;/span&gt; (TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService())
      EnumFolderTasks(ts.RootFolder);
}

&lt;span style="color:Blue;"&gt;void&lt;/span&gt; EnumFolderTasks(TaskFolder fld)
{
   &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (Task task &lt;span style="color:Blue;"&gt;in&lt;/span&gt; fld.Tasks)
      ActOnTask(task);
   &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (TaskFolder sfld &lt;span style="color:Blue;"&gt;in&lt;/span&gt; fld.SubFolders)
      EnumFolderTasks(sfld);
}

&lt;span style="color:Blue;"&gt;void&lt;/span&gt; ActOnTask(Task t)
{
   &lt;span style="color:Green;"&gt;// Do something interesting here&lt;/span&gt;
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Complex example&lt;/b&gt;&lt;a name="complex"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;string&lt;/span&gt; user = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; preWin7 = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;

&lt;span style="color:Green;"&gt;// Get the service on the local machine&lt;/span&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; (TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService())
{
   &lt;span style="color:Green;"&gt;// Display version and server state&lt;/span&gt;
   Version ver = ts.HighestSupportedVersion;
   &lt;span style="color:Blue;"&gt;bool&lt;/span&gt; newVer = (ver &amp;gt;= &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Version(1, 2));
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Highest version: &amp;quot;&lt;/span&gt; + ver);
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Server: {0} ({1})&amp;quot;&lt;/span&gt;, ts.TargetServer, ts.Connected ? &lt;span style="color:#A31515;"&gt;&amp;quot;Connected&amp;quot;&lt;/span&gt; : &lt;span style="color:#A31515;"&gt;&amp;quot;Disconnected&amp;quot;&lt;/span&gt;);

   &lt;span style="color:Green;"&gt;// Output all of the running tasks&lt;/span&gt;
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Running tasks:&amp;quot;&lt;/span&gt;);
   &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (RunningTask rt &lt;span style="color:Blue;"&gt;in&lt;/span&gt; ts.GetRunningTasks(&lt;span style="color:Blue;"&gt;true&lt;/span&gt;))
   {
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (rt != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
      {
         Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;+ {0}, {1} ({2})&amp;quot;&lt;/span&gt;, rt.Name, rt.Path, rt.State);
         &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (ver.Minor &amp;gt; 0)
            Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;  Current Action: &amp;quot;&lt;/span&gt; + rt.CurrentAction);
      }
   }

   &lt;span style="color:Green;"&gt;// Output all the tasks in the root folder with their triggers and actions&lt;/span&gt;
   TaskFolder tf = ts.RootFolder;
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nRoot folder tasks ({0}):&amp;quot;&lt;/span&gt;, tf.Tasks.Count);
   &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (Task t &lt;span style="color:Blue;"&gt;in&lt;/span&gt; tf.Tasks)
   {
      &lt;span style="color:Blue;"&gt;try&lt;/span&gt;
      {
         Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;+ {0}, {1} ({2})&amp;quot;&lt;/span&gt;, t.Name, t.Definition.RegistrationInfo.Author, t.State);
         &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (Trigger trg &lt;span style="color:Blue;"&gt;in&lt;/span&gt; t.Definition.Triggers)
            Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot; + {0}&amp;quot;&lt;/span&gt;, trg);
         &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (Action act &lt;span style="color:Blue;"&gt;in&lt;/span&gt; t.Definition.Actions)
            Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot; = {0}&amp;quot;&lt;/span&gt;, act);
      }
      &lt;span style="color:Blue;"&gt;catch&lt;/span&gt; { }
   }

   &lt;span style="color:Green;"&gt;// Output an enumeration of all folders under the root&lt;/span&gt;
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\n***Checking folder enum***&amp;quot;&lt;/span&gt;);
   TaskFolderCollection tfs = tf.SubFolders;
   &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (tfs.Count &amp;gt; 0)
   {
      Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nSub folders:&amp;quot;&lt;/span&gt;);
      &lt;span style="color:Blue;"&gt;try&lt;/span&gt;
      {
         &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (TaskFolder sf &lt;span style="color:Blue;"&gt;in&lt;/span&gt; tfs)
            Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;+ {0}&amp;quot;&lt;/span&gt;, sf.Path);
      }
      &lt;span style="color:Blue;"&gt;catch&lt;/span&gt; (Exception ex)
      {
         Console.WriteLine(ex.ToString());
      }
   }

   &lt;span style="color:Green;"&gt;// Display information about the Microsoft folder&lt;/span&gt;
   &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer)
   {
      Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\n***Checking folder retrieval***&amp;quot;&lt;/span&gt;);
      &lt;span style="color:Blue;"&gt;try&lt;/span&gt;
      {
         TaskFolder sub = tf.SubFolders[&lt;span style="color:#A31515;"&gt;&amp;quot;Microsoft&amp;quot;&lt;/span&gt;];
         Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nSubfolder path: &amp;quot;&lt;/span&gt; + sub.Path);
      }
      &lt;span style="color:Blue;"&gt;catch&lt;/span&gt; (NotSupportedException) { }
      &lt;span style="color:Blue;"&gt;catch&lt;/span&gt; (Exception ex)
      {
         Console.WriteLine(ex.ToString());
      }
   }

   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\n***Checking task creation***&amp;quot;&lt;/span&gt;);
   &lt;span style="color:Blue;"&gt;try&lt;/span&gt;
   {
      &lt;span style="color:Green;"&gt;// Create a new task definition and assign properties&lt;/span&gt;
      TaskDefinition td = ts.NewTask();
      td.Data = &lt;span style="color:#A31515;"&gt;&amp;quot;Your data&amp;quot;&lt;/span&gt;;
      td.Principal.UserId = user;
      td.Principal.LogonType = TaskLogonType.InteractiveToken;
      td.RegistrationInfo.Author = &lt;span style="color:#A31515;"&gt;&amp;quot;dahall&amp;quot;&lt;/span&gt;;
      td.RegistrationInfo.Description = &lt;span style="color:#A31515;"&gt;&amp;quot;Does something&amp;quot;&lt;/span&gt;;
      td.RegistrationInfo.Documentation = &lt;span style="color:#A31515;"&gt;&amp;quot;Don&amp;#39;t pretend this is real.&amp;quot;&lt;/span&gt;;
      td.Settings.DisallowStartIfOnBatteries = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
      td.Settings.Enabled = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.ExecutionTimeLimit = TimeSpan.FromHours(2);
      td.Settings.Hidden = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.IdleSettings.IdleDuration = TimeSpan.FromMinutes(20);
      td.Settings.IdleSettings.RestartOnIdle = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.IdleSettings.StopOnIdleEnd = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.IdleSettings.WaitTimeout = TimeSpan.FromMinutes(10);
      td.Settings.Priority = System.Diagnostics.ProcessPriorityClass.Normal;
      td.Settings.RunOnlyIfIdle = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.RunOnlyIfNetworkAvailable = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.StopIfGoingOnBatteries = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer)
      {
         td.Principal.RunLevel = TaskRunLevel.Highest; &lt;span style="color:Green;"&gt;//.LUA;&lt;/span&gt;
         &lt;span style="color:Green;"&gt;//td.RegistrationInfo.SecurityDescriptorSddlForm = &amp;quot;O:COG:CGD::(A;;RPWPCCDCLCSWRCWDWOGA;;;S-1-0-0)&amp;quot;;&lt;/span&gt;
         td.RegistrationInfo.Source = &lt;span style="color:#A31515;"&gt;&amp;quot;Test App&amp;quot;&lt;/span&gt;;
         td.RegistrationInfo.URI = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Uri(&lt;span style="color:#A31515;"&gt;&amp;quot;test://app&amp;quot;&lt;/span&gt;);
         td.RegistrationInfo.Version = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Version(0, 9);
         td.Settings.AllowDemandStart = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
         td.Settings.AllowHardTerminate = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
         td.Settings.Compatibility = TaskCompatibility.V2;
         td.Settings.DeleteExpiredTaskAfter = TimeSpan.FromMinutes(1);
         td.Settings.MultipleInstances = TaskInstancesPolicy.StopExisting;
         td.Settings.StartWhenAvailable = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
         td.Settings.WakeToRun = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
         td.Settings.RestartCount = 5;
         td.Settings.RestartInterval = TimeSpan.FromSeconds(100);
      }

      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (preWin7)
      {
         &lt;span style="color:Green;"&gt;// Create a trigger that fires 5 minutes after the system is booted&lt;/span&gt;
         BootTrigger bTrigger = (BootTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; BootTrigger { Enabled = &lt;span style="color:Blue;"&gt;false&lt;/span&gt; });
         &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) bTrigger.Delay = TimeSpan.FromMinutes(5);
      }

      &lt;span style="color:Green;"&gt;// Create a trigger that fires every other day randomly between 6:00 a.m. and 8:00 a.m.&lt;/span&gt;
      DailyTrigger dTrigger = (DailyTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; DailyTrigger());
      dTrigger.StartBoundary = DateTime.Today + TimeSpan.FromHours(6);
      dTrigger.DaysInterval = 2;
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) dTrigger.RandomDelay = TimeSpan.FromHours(2);

      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer)
      {
         &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (preWin7)
         {
            &lt;span style="color:Green;"&gt;// Create a trigger that will fire on a system security event&lt;/span&gt;
            EventTrigger eTrigger = (EventTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; EventTrigger());
            eTrigger.SetBasic(&lt;span style="color:#A31515;"&gt;&amp;quot;Security&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;VSSAudit&amp;quot;&lt;/span&gt;, 25);
            eTrigger.ValueQueries.Add(&lt;span style="color:#A31515;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;Value&amp;quot;&lt;/span&gt;);
         }

         &lt;span style="color:Green;"&gt;// Create a trigger that fires 5 minutes after this task is registered&lt;/span&gt;
         td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; RegistrationTrigger { Delay = TimeSpan.FromMinutes(5) });

         &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (preWin7)
         {
            &lt;span style="color:Green;"&gt;// Create triggers that fire after various system states are changed&lt;/span&gt;
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.ConsoleConnect, UserId = user });
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.ConsoleDisconnect });
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.RemoteConnect });
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.RemoteDisconnect });
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.SessionLock, UserId = user });
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.SessionUnlock });
         }
      }

      &lt;span style="color:Green;"&gt;// Create a trigger that fires when the system is idle&lt;/span&gt;
      td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; IdleTrigger());

      &lt;span style="color:Green;"&gt;// Create a trigger that fires 15 minutes after the current user logs on and then every 1000 seconds after that&lt;/span&gt;
      LogonTrigger lTrigger = (LogonTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; LogonTrigger());
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer)
      {
         lTrigger.Delay = TimeSpan.FromMinutes(15);
         lTrigger.UserId = user;
         lTrigger.Repetition.Interval = TimeSpan.FromSeconds(1000);
      }

      &lt;span style="color:Green;"&gt;// Create a trigger that fires on the 3rd, 6th, 10th, 18th, and last days of July and November and stops triggering 90 days from now&lt;/span&gt;
      MonthlyTrigger mTrigger = (MonthlyTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MonthlyTrigger());
      mTrigger.DaysOfMonth = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; &lt;span style="color:Blue;"&gt;int&lt;/span&gt;[] { 3, 6, 10, 18 };
      mTrigger.MonthsOfYear = MonthsOfTheYear.July | MonthsOfTheYear.November;
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) mTrigger.RunOnLastDayOfMonth = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
      mTrigger.EndBoundary = DateTime.Today + TimeSpan.FromDays(90);

      &lt;span style="color:Green;"&gt;// Create a trigger that fires every day of the first and last week of December and January&lt;/span&gt;
      MonthlyDOWTrigger mdTrigger = (MonthlyDOWTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MonthlyDOWTrigger());
      mdTrigger.DaysOfWeek = DaysOfTheWeek.AllDays;
      mdTrigger.MonthsOfYear = MonthsOfTheYear.January | MonthsOfTheYear.December;
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) mdTrigger.RunOnLastWeekOfMonth = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
      mdTrigger.WeeksOfMonth = WhichWeek.FirstWeek;

      &lt;span style="color:Green;"&gt;// Create a trigger that fires 1 minute from now and then every 15 minutes for the next 7 days.&lt;/span&gt;
      TimeTrigger tTrigger = (TimeTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; TimeTrigger());
      tTrigger.StartBoundary = DateTime.Now + TimeSpan.FromMinutes(1);
      tTrigger.EndBoundary = DateTime.Today + TimeSpan.FromDays(7);
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) tTrigger.ExecutionTimeLimit = TimeSpan.FromSeconds(15);
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) tTrigger.Id = &lt;span style="color:#A31515;"&gt;&amp;quot;Time test&amp;quot;&lt;/span&gt;;
      tTrigger.Repetition.Duration = TimeSpan.FromMinutes(20);
      tTrigger.Repetition.Interval = TimeSpan.FromMinutes(15);
      tTrigger.Repetition.StopAtDurationEnd = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;

      &lt;span style="color:Green;"&gt;// Create a trigger that fires every third week on Monday&lt;/span&gt;
      WeeklyTrigger wTrigger = (WeeklyTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; WeeklyTrigger());
      wTrigger.DaysOfWeek = DaysOfTheWeek.Monday;
      wTrigger.WeeksInterval = 3;

      &lt;span style="color:Green;"&gt;// Create an action which opens a log file in notepad&lt;/span&gt;
      td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\\test.log&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;));
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer)
      {
         &lt;span style="color:Green;"&gt;// Create an action which shows a message to the interactive user&lt;/span&gt;
         td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ShowMessageAction(&lt;span style="color:#A31515;"&gt;&amp;quot;Running Notepad&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;Info&amp;quot;&lt;/span&gt;));
         &lt;span style="color:Green;"&gt;// Create an action which sends an email&lt;/span&gt;
         td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; EmailAction(&lt;span style="color:#A31515;"&gt;&amp;quot;Testing&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;dahall@codeplex.com&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;user@test.com&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;You&amp;#39;ve got mail.&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;mail.myisp.com&amp;quot;&lt;/span&gt;));
         &lt;span style="color:Green;"&gt;// Create an action which loads a COM object and calls the ITaskHandler interface&lt;/span&gt;
         td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ComHandlerAction(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; Guid(&lt;span style="color:#A31515;"&gt;&amp;quot;CE7D4428-8A77-4c5d-8A13-5CAB5D1EC734&amp;quot;&lt;/span&gt;), &lt;span style="color:Blue;"&gt;string&lt;/span&gt;.Empty));
      }

      &lt;span style="color:Green;"&gt;// Register the task definition (saves it) in the security context of the interactive user&lt;/span&gt;
      tf.RegisterTaskDefinition(&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;, td, TaskCreation.CreateOrUpdate, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;, TaskLogonType.InteractiveToken, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;);
   }
   &lt;span style="color:Blue;"&gt;catch&lt;/span&gt; (Exception ex)
   {
      Console.WriteLine(ex.ToString());
   }

   &lt;span style="color:Green;"&gt;// Display information about the newly created task&lt;/span&gt;
   Task runningTask = tf.Tasks[&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;];
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nNew task will run at &amp;quot;&lt;/span&gt; + runningTask.NextRunTime);
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nNew task triggers:&amp;quot;&lt;/span&gt;);
   &lt;span style="color:Blue;"&gt;for&lt;/span&gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; runningTask.Definition.Triggers.Count; i++)
      Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;  {0}: {1}&amp;quot;&lt;/span&gt;, i, runningTask.Definition.Triggers[i]);
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nNew task actions:&amp;quot;&lt;/span&gt;);
   &lt;span style="color:Blue;"&gt;for&lt;/span&gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; runningTask.Definition.Actions.Count; i++)
      Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;  {0}: {1}&amp;quot;&lt;/span&gt;, i, runningTask.Definition.Actions[i]);

   &lt;span style="color:Green;"&gt;// Remove the task we just created since this was just a test&lt;/span&gt;
   tf.DeleteTask(&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;);
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Task history example&lt;/b&gt;&lt;a name="history"&gt;&lt;/a&gt;&lt;br /&gt;Only works with release 1.6.2 or source code drop 66948 and later and requires the inclusion of the TaskSchedulerEditor assembly.&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
TaskEventLog log = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskEventLog(task.Path);
List&amp;lt;ListViewItem&amp;gt; c = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;ListViewItem&amp;gt;(100);
&lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (TaskEvent item &lt;span style="color:Blue;"&gt;in&lt;/span&gt; log)
   c.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ListViewItem(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; &lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] { item.Level, item.TimeCreated.ToString(), item.EventId.ToString(),
      item.TaskCategory, item.OpCode, item.ActivityId.ToString() }));
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>dahall</author><pubDate>Fri, 02 Nov 2012 16:45:07 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Examples 20121102044507P</guid></item><item><title>New Comment on "Examples"</title><link>http://taskscheduler.codeplex.com/wikipage?title=Examples&amp;ANCHOR#C25452</link><description>&amp;#62;&amp;#62;dbrewerton&amp;#58; The core library &amp;#40;not the UI library&amp;#41; can be used within ASP.NET but you&amp;#39;ll need to be aware of execution permissions. Check the Discussions area for more information. To get and create tasks on a remote computer, specify that computer&amp;#39;s name in the TaskService constructor. To execute tasks, retrieve an instance of the Task and use the Run method.</description><author>dahall</author><pubDate>Fri, 02 Nov 2012 16:41:25 GMT</pubDate><guid isPermaLink="false">New Comment on "Examples" 20121102044125P</guid></item><item><title>New Comment on "Examples"</title><link>http://taskscheduler.codeplex.com/wikipage?title=Examples&amp;ANCHOR#C25449</link><description>Also, is this library only for Desktop&amp;#47;Console apps&amp;#63; I&amp;#39;m trying to find one that works with asp.net.</description><author>dbrewerton</author><pubDate>Fri, 02 Nov 2012 12:06:50 GMT</pubDate><guid isPermaLink="false">New Comment on "Examples" 20121102120650P</guid></item><item><title>New Comment on "Examples"</title><link>http://taskscheduler.codeplex.com/wikipage?title=Examples&amp;ANCHOR#C25447</link><description>I have a question, how can I make this application grab scheduled tasks from another server on the network and allow people to run the tasks on demand&amp;#63;</description><author>dbrewerton</author><pubDate>Fri, 02 Nov 2012 11:47:32 GMT</pubDate><guid isPermaLink="false">New Comment on "Examples" 20121102114732A</guid></item><item><title>Updated Wiki: Documentation</title><link>http://taskscheduler.codeplex.com/documentation?version=14</link><description>&lt;div class="wikidoc"&gt;There is a help file included with the download that provides an overview of the various classes. The &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa446802(v=VS.85).aspx"&gt;Microsoft MSDN documentation&lt;/a&gt; provides an excellent overview of the Task Scheduler along with details around security and permission, idle conditions, and trigger repetition.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The &lt;a href="http://taskscheduler.codeplex.com/wikipage?title=Examples&amp;referringTitle=Documentation"&gt;Examples Page&lt;/a&gt; shows some C# code that demonstrates almost every function of the library.&lt;/li&gt;
&lt;li&gt;The &lt;a href="http://taskscheduler.codeplex.com/wikipage?title=Install&amp;referringTitle=Documentation"&gt;Installation Page&lt;/a&gt; explains how to use this library in your own projects and includes a sample project.&lt;/li&gt;&lt;/ul&gt;
The &lt;b&gt;&lt;span class="codeInline"&gt;TaskService&lt;/span&gt;&lt;/b&gt; class represents the machine specific instance of the system task scheduler. It provides access to information about the service, access folders (2.0 only), and can quickly add or retrieve a task. If you only need to use the library for very intermitant periods, wrap the TaskService instantiation in a &lt;i&gt;using&lt;/i&gt; statement to easily disconnect at the end of your use. However, if you plan on using the connection to the Task Scheduler repeatedly, use an assembly level field to store the TaskService instance as connecting and disconnecting is an expensive operation.&lt;br /&gt;&lt;br /&gt;Tasks are accessed and can be enumerated through a &lt;b&gt;&lt;span class="codeInline"&gt;TaskFolder&lt;/span&gt;&lt;/b&gt;. For systems supporting only the 1.0 library, there is only the root folder. The 2.0 library supports a hierarchal structure similar to a file system. The &lt;span class="codeInline"&gt;Tasks&lt;/span&gt; property exposes a &lt;b&gt;&lt;span class="codeInline"&gt;TaskCollection&lt;/span&gt;&lt;/b&gt; instance which can enumerate tasks and provides an indexer which allows access to individual tasks by name. The &lt;span class="codeInline"&gt;TaskCollection&lt;/span&gt; class also has methods that allow for the creation/registration and deletion of tasks and subfolders by name.&lt;br /&gt;&lt;br /&gt;A task is represented by a &lt;b&gt;&lt;span class="codeInline"&gt;Task&lt;/span&gt;&lt;/b&gt; instance. The Task class provides information about tasks state and history and exposes the task&amp;#39;s &lt;span class="codeInline"&gt;TaskDefinition&lt;/span&gt; through the &lt;span class="codeInline"&gt;Definition&lt;/span&gt; property.&lt;br /&gt;&lt;br /&gt;A &lt;b&gt;&lt;span class="codeInline"&gt;TaskDefinition&lt;/span&gt;&lt;/b&gt; exposes all of the properties of a task which allow you to define how and what will run when the task is triggered. A task must have at least one action and one trigger defined.&lt;br /&gt;&lt;br /&gt;Each task has a list of triggers that determine when the task will be run. These are accessed through the &lt;span class="codeInline"&gt;Triggers&lt;/span&gt; property of a task definition which exposes a &lt;span class="codeInline"&gt;TriggerCollection&lt;/span&gt; instance. &lt;span class="codeInline"&gt;TriggerCollection&lt;/span&gt; provides an indexer which allows access to individual triggers by their position in the list. The &lt;span class="codeInline"&gt;TriggerCollection&lt;/span&gt; class also has methods that allow for the addition and removal of triggers. &lt;span class="codeInline"&gt;TriggerCollection&lt;/span&gt; implements the IList interface so you can also enumerate all tasks using the foreach construct.&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;&lt;span class="codeInline"&gt;Trigger&lt;/span&gt;&lt;/b&gt; class is an abstract class that forms the foundation of the different types of triggers that can be specified for a task. There are 10 different specializations that provide different ways to specify the time a task will run. Not all specializations work with the 1.0 library. See the help file for details about each of the trigger classes. The &lt;a href="http://taskscheduler.codeplex.com/wikipage?title=TriggerSamples&amp;referringTitle=Documentation"&gt;Trigger Documentation&lt;/a&gt; has some examples of how to setup each kind of trigger.&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;&lt;span class="codeInline"&gt;Action&lt;/span&gt;&lt;/b&gt; class is an abstract class that is the foundation for four different actions. On 1.0, only the &lt;span class="codeInline"&gt;ExecAction&lt;/span&gt; specialization is available. These actions determine what the service will do when a trigger is fired. The &lt;a href="http://taskscheduler.codeplex.com/wikipage?title=ActionSamples&amp;referringTitle=Documentation"&gt;Action Documentation&lt;/a&gt; has some examples of how to setup each kind of action.&lt;br /&gt;&lt;br /&gt;Below is a brief example of how to use the library from C#.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; Microsoft.Win32.TaskScheduler;

&lt;span style="color:Blue;"&gt;class&lt;/span&gt; Program
{
   &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] args)
   {
      &lt;span style="color:Green;"&gt;// Get the service on the local machine&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;using&lt;/span&gt; (TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService())
      {
         &lt;span style="color:Green;"&gt;// Create a new task definition and assign properties&lt;/span&gt;
         TaskDefinition td = ts.NewTask();
         td.RegistrationInfo.Description = &lt;span style="color:#A31515;"&gt;&amp;quot;Does something&amp;quot;&lt;/span&gt;;

         &lt;span style="color:Green;"&gt;// Create a trigger that will fire the task at this time every other day&lt;/span&gt;
         td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; DailyTrigger { DaysInterval = 2 });

         &lt;span style="color:Green;"&gt;// Create an action that will launch Notepad whenever the trigger fires&lt;/span&gt;
         td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\\test.log&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;));

         &lt;span style="color:Green;"&gt;// Register the task in the root folder&lt;/span&gt;
         ts.RootFolder.RegisterTaskDefinition(&lt;span style="color:#A31515;"&gt;@&amp;quot;Test&amp;quot;&lt;/span&gt;, td);

         &lt;span style="color:Green;"&gt;// Remove the task we just created&lt;/span&gt;
         ts.RootFolder.DeleteTask(&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;);
      }
   }
}
&lt;/pre&gt;&lt;/div&gt;Here&amp;#39;s the same as above but in VB.NET&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;Imports&lt;/span&gt; Microsoft.Win32.TaskScheduler

&lt;span style="color:Blue;"&gt;Module&lt;/span&gt; Module1

    &lt;span style="color:Blue;"&gt;Sub&lt;/span&gt; Main()
        &lt;span style="color:Blue;"&gt;Using&lt;/span&gt; ts &lt;span style="color:Blue;"&gt;As&lt;/span&gt; &lt;span style="color:Blue;"&gt;New&lt;/span&gt; TaskService()
            &lt;span style="color:Green;"&gt;&amp;#39; Create a new task definition and assign properties&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;Const&lt;/span&gt; taskName &lt;span style="color:Blue;"&gt;As&lt;/span&gt; &lt;span style="color:Blue;"&gt;String&lt;/span&gt; = &lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;Dim&lt;/span&gt; td &lt;span style="color:Blue;"&gt;As&lt;/span&gt; TaskDefinition = ts.NewTask
            td.RegistrationInfo.Description = &lt;span style="color:#A31515;"&gt;&amp;quot;Does something&amp;quot;&lt;/span&gt;

            &lt;span style="color:Green;"&gt;&amp;#39; Add a trigger that will fire every other week on Monday and Saturday and&lt;/span&gt;
            &lt;span style="color:Green;"&gt;&amp;#39; repeat every 10 minutes for the following 11 hours&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;Dim&lt;/span&gt; wt &lt;span style="color:Blue;"&gt;As&lt;/span&gt; &lt;span style="color:Blue;"&gt;New&lt;/span&gt; WeeklyTrigger()
            wt.DaysOfWeek = DaysOfTheWeek.Monday &lt;span style="color:Blue;"&gt;Or&lt;/span&gt; DaysOfTheWeek.Saturday
            wt.WeeksInterval = 2
            wt.StartBoundary = Now
            wt.Repetition.Duration = TimeSpan.FromHours(11)
            wt.Repetition.Interval = TimeSpan.FromMinutes(10)
            td.Triggers.Add(wt)

            &lt;span style="color:Green;"&gt;&amp;#39; Add an action (shorthand) that runs Notepad&lt;/span&gt;
            td.Actions.Add(&lt;span style="color:Blue;"&gt;New&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;C:\Test.log&amp;quot;&lt;/span&gt;))

            &lt;span style="color:Green;"&gt;&amp;#39; Register the task in the root folder&lt;/span&gt;
            ts.RootFolder.RegisterTaskDefinition(taskName, td)

            &lt;span style="color:Green;"&gt;&amp;#39; Remove the task we just created&lt;/span&gt;
            ts.RootFolder.DeleteTask(taskName)
        &lt;span style="color:Blue;"&gt;End&lt;/span&gt; &lt;span style="color:Blue;"&gt;Using&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;End&lt;/span&gt; &lt;span style="color:Blue;"&gt;Sub&lt;/span&gt;

&lt;span style="color:Blue;"&gt;End&lt;/span&gt; &lt;span style="color:Blue;"&gt;Module&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;If you&amp;#39;re really into shorthand code, here&amp;#39;s almost the same functionality as the C# code above, but much shorter:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; Microsoft.Win32.TaskScheduler;

&lt;span style="color:Blue;"&gt;class&lt;/span&gt; Program
{
   &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] args)
   {
      &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService().AddTask(&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;new&lt;/span&gt; DailyTrigger { DaysInterval = 2 }, &lt;span style="color:Blue;"&gt;new&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\\test.log&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;));
   }
}
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>dahall</author><pubDate>Mon, 29 Oct 2012 21:57:37 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20121029095737P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://taskscheduler.codeplex.com/documentation?version=13</link><description>&lt;div class="wikidoc"&gt;There is a help file included with the download that provides an overview of the various classes. The &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa446802(v=VS.85).aspx"&gt;Microsoft MSDN documentation&lt;/a&gt; provides an excellent overview of the Task Scheduler along with details around security and permission, idle conditions, and trigger repetition.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The &lt;a href="http://taskscheduler.codeplex.com/wikipage?title=Examples&amp;referringTitle=Documentation"&gt;Examples Page&lt;/a&gt; shows some C# code that demonstrates almost every function of the library.&lt;/li&gt;
&lt;li&gt;The &lt;a href="http://taskscheduler.codeplex.com/wikipage?title=Install&amp;referringTitle=Documentation"&gt;Installation Page&lt;/a&gt; explains how to use this library in your own projects and includes a sample project.&lt;/li&gt;&lt;/ul&gt;
The &lt;b&gt;&lt;span class="codeInline"&gt;TaskService&lt;/span&gt;&lt;/b&gt; class represents the machine specific instance of the system task scheduler. It provides access to information about the service, access folders (2.0 only), and can quickly add or retrieve a task. If you only need to use the library for very intermitant periods, wrap the TaskService instantiation in a &lt;i&gt;using&lt;/i&gt; statement to easily disconnect at the end of your use. However, if you plan on using the connection to the Task Scheduler repeatedly, use an assembly level field to store the TaskService instance as connecting and disconnecting is an expensive operation.&lt;br /&gt;&lt;br /&gt;Tasks are accessed and can be enumerated through a &lt;b&gt;&lt;span class="codeInline"&gt;TaskFolder&lt;/span&gt;&lt;/b&gt;. For systems supporting only the 1.0 library, there is only the root folder. The 2.0 library supports a hierarchal structure similar to a file system. The &lt;span class="codeInline"&gt;Tasks&lt;/span&gt; property exposes a &lt;b&gt;&lt;span class="codeInline"&gt;TaskCollection&lt;/span&gt;&lt;/b&gt; instance which can enumerate tasks and provides an indexer which allows access to individual tasks by name. The &lt;span class="codeInline"&gt;TaskCollection&lt;/span&gt; class also has methods that allow for the creation/registration and deletion of tasks and subfolders by name.&lt;br /&gt;&lt;br /&gt;A task is represented by a &lt;b&gt;&lt;span class="codeInline"&gt;Task&lt;/span&gt;&lt;/b&gt; instance. The Task class provides information about tasks state and history and exposes the task&amp;#39;s &lt;span class="codeInline"&gt;TaskDefinition&lt;/span&gt; through the &lt;span class="codeInline"&gt;Definition&lt;/span&gt; property.&lt;br /&gt;&lt;br /&gt;A &lt;b&gt;&lt;span class="codeInline"&gt;TaskDefinition&lt;/span&gt;&lt;/b&gt; exposes all of the properties of a task which allow you to define how and what will run when the task is triggered. A task must have at least one action and one trigger defined.&lt;br /&gt;&lt;br /&gt;Each task has a list of triggers that determine when the task will be run. These are accessed through the &lt;span class="codeInline"&gt;Triggers&lt;/span&gt; property of a task definition which exposes a &lt;span class="codeInline"&gt;TriggerCollection&lt;/span&gt; instance. &lt;span class="codeInline"&gt;TriggerCollection&lt;/span&gt; provides an indexer which allows access to individual triggers by their position in the list. The &lt;span class="codeInline"&gt;TriggerCollection&lt;/span&gt; class also has methods that allow for the addition and removal of triggers. &lt;span class="codeInline"&gt;TriggerCollection&lt;/span&gt; implements the IList interface so you can also enumerate all tasks using the foreach construct.&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;&lt;span class="codeInline"&gt;Trigger&lt;/span&gt;&lt;/b&gt; class is an abstract class that forms the foundation of the different types of triggers that can be specified for a task. There are 10 different specializations that provide different ways to specify the time a task will run. Not all specializations work with the 1.0 library. See the help file for details about each of the trigger classes. The &lt;a href="http://taskscheduler.codeplex.com/wikipage?title=TriggerSamples&amp;referringTitle=Documentation"&gt;Trigger Documentation&lt;/a&gt; has some examples of how to setup each kind of trigger.&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;&lt;span class="codeInline"&gt;Action&lt;/span&gt;&lt;/b&gt; class is an abstract class that is the foundation for four different actions. On 1.0, only the &lt;span class="codeInline"&gt;ExecAction&lt;/span&gt; specialization is available. These actions determine what the service will do when a trigger is fired. The &lt;a href="http://taskscheduler.codeplex.com/wikipage?title=ActionSamples&amp;referringTitle=Documentation"&gt;Action Documentation&lt;/a&gt; has some examples of how to setup each kind of action.&lt;br /&gt;&lt;br /&gt;Below is a brief example of how to use the library from C#.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; Microsoft.Win32.TaskScheduler;

&lt;span style="color:Blue;"&gt;class&lt;/span&gt; Program
{
   &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] args)
   {
      &lt;span style="color:Green;"&gt;// Get the service on the local machine&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;using&lt;/span&gt; (TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService())
      {
         &lt;span style="color:Green;"&gt;// Create a new task definition and assign properties&lt;/span&gt;
         TaskDefinition td = ts.NewTask();
         td.RegistrationInfo.Description = &lt;span style="color:#A31515;"&gt;&amp;quot;Does something&amp;quot;&lt;/span&gt;;

         &lt;span style="color:Green;"&gt;// Create a trigger that will fire the task at this time every other day&lt;/span&gt;
         td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; DailyTrigger { DaysInterval = 2 });

         &lt;span style="color:Green;"&gt;// Create an action that will launch Notepad whenever the trigger fires&lt;/span&gt;
         td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\\test.log&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;));

         &lt;span style="color:Green;"&gt;// Register the task in the root folder&lt;/span&gt;
         ts.RootFolder.RegisterTaskDefinition(&lt;span style="color:#A31515;"&gt;@&amp;quot;Test&amp;quot;&lt;/span&gt;, td);

         &lt;span style="color:Green;"&gt;// Remove the task we just created&lt;/span&gt;
         ts.RootFolder.DeleteTask(&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;);
      }
   }
}
&lt;/pre&gt;&lt;/div&gt;Here&amp;#39;s the same as above but in VB.NET&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;Imports&lt;/span&gt; Microsoft.Win32.TaskScheduler

&lt;span style="color:Blue;"&gt;Module&lt;/span&gt; Module1

    &lt;span style="color:Blue;"&gt;Sub&lt;/span&gt; Main()
        &lt;span style="color:Blue;"&gt;Using&lt;/span&gt; ts &lt;span style="color:Blue;"&gt;As&lt;/span&gt; &lt;span style="color:Blue;"&gt;New&lt;/span&gt; TaskService()
            &lt;span style="color:Green;"&gt;&amp;#39; Create a new task definition and assign properties&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;Const&lt;/span&gt; taskName &lt;span style="color:Blue;"&gt;As&lt;/span&gt; &lt;span style="color:Blue;"&gt;String&lt;/span&gt; = &lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;Dim&lt;/span&gt; td &lt;span style="color:Blue;"&gt;As&lt;/span&gt; TaskDefinition = ts.NewTask
            td.RegistrationInfo.Description = &lt;span style="color:#A31515;"&gt;&amp;quot;Does something&amp;quot;&lt;/span&gt;

            &lt;span style="color:Green;"&gt;&amp;#39; Add a trigger that will fire every other week on Monday and Saturday and repeat&lt;/span&gt;
            &lt;span style="color:Green;"&gt;&amp;#39; every 10 minutes for the following 11 hours&lt;/span&gt;
            &lt;span style="color:Blue;"&gt;Dim&lt;/span&gt; wt &lt;span style="color:Blue;"&gt;As&lt;/span&gt; &lt;span style="color:Blue;"&gt;New&lt;/span&gt; WeeklyTrigger()
            wt.DaysOfWeek = DaysOfTheWeek.Monday &lt;span style="color:Blue;"&gt;Or&lt;/span&gt; DaysOfTheWeek.Saturday
            wt.WeeksInterval = 2
            wt.StartBoundary = Now
            wt.Repetition.Duration = TimeSpan.FromHours(11)
            wt.Repetition.Interval = TimeSpan.FromMinutes(10)
            td.Triggers.Add(wt)

            &lt;span style="color:Green;"&gt;&amp;#39; Add an action (shorthand) that runs Notepad&lt;/span&gt;
            td.Actions.Add(&lt;span style="color:Blue;"&gt;New&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;C:\Test.log&amp;quot;&lt;/span&gt;))

            &lt;span style="color:Green;"&gt;&amp;#39; Register the task in the root folder&lt;/span&gt;
            ts.RootFolder.RegisterTaskDefinition(taskName, td)

            &lt;span style="color:Green;"&gt;&amp;#39; Remove the task we just created&lt;/span&gt;
            ts.RootFolder.DeleteTask(taskName)
        &lt;span style="color:Blue;"&gt;End&lt;/span&gt; &lt;span style="color:Blue;"&gt;Using&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;End&lt;/span&gt; &lt;span style="color:Blue;"&gt;Sub&lt;/span&gt;

&lt;span style="color:Blue;"&gt;End&lt;/span&gt; &lt;span style="color:Blue;"&gt;Module&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;If you&amp;#39;re really into shorthand code, here&amp;#39;s almost the same functionality as the C# code above, but much shorter:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; Microsoft.Win32.TaskScheduler;

&lt;span style="color:Blue;"&gt;class&lt;/span&gt; Program
{
   &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] args)
   {
      &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService().AddTask(&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;new&lt;/span&gt; DailyTrigger { DaysInterval = 2 }, &lt;span style="color:Blue;"&gt;new&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\\test.log&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;));
   }
}
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>dahall</author><pubDate>Mon, 29 Oct 2012 21:57:05 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20121029095705P</guid></item><item><title>Updated Wiki: Home</title><link>http://taskscheduler.codeplex.com/wikipage?version=19</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;This project provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions, provides an editor and allows for localization support.&lt;br /&gt;&lt;br /&gt;Microsoft introduced version 2.0 (internally version 1.2) with a completely new object model with Windows Vista. The managed assembly closely resembles the new object model, but allows the 1.0 (internally version 1.1) COM objects to be manipulated. It will automatically choose the most recent version of the library found on the host system (up through 1.4). The project was written in C#, but works with any .NET language including scripting languages.&lt;br /&gt;&lt;br /&gt;The project is based on work the originator started in January 2002 with the 1.0 library that is currently hosted on &lt;a href="http://www.codeproject.com/KB/system/taskschedulerlibrary.aspx"&gt;CodeProject&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There is a second library that includes a GUI editor and a wizard for tasks which mimic the ones in Vista and later and adds optional pages for new properties. There are also a few UI goodies for you code junkies. There is a DropDownCheckList control that is very useful for selecting flag type enumerations. There is a FullDateTimePicker control which allows both date and time selection in a single control. There is a CredentialsDialog class for prompting for a password which wraps the Windows API. Lastly, there is code that simplifies pulling events from the system event log.&lt;br /&gt;&lt;br /&gt;There is a help file included with the download that provides an overview of the various classes. Below is a brief example of how to use the library from C#.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; System;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; Microsoft.Win32.TaskScheduler;

&lt;span style="color:Blue;"&gt;class&lt;/span&gt; Program
{
   &lt;span style="color:Blue;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] args)
   {
      &lt;span style="color:Green;"&gt;// Get the service on the local machine&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;using&lt;/span&gt; (TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService())
      {
         &lt;span style="color:Green;"&gt;// Create a new task definition and assign properties&lt;/span&gt;
         TaskDefinition td = ts.NewTask();
         td.RegistrationInfo.Description = &lt;span style="color:#A31515;"&gt;&amp;quot;Does something&amp;quot;&lt;/span&gt;;

         &lt;span style="color:Green;"&gt;// Create a trigger that will fire the task at this time every other day&lt;/span&gt;
         td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; DailyTrigger { DaysInterval = 2 });

         &lt;span style="color:Green;"&gt;// Create an action that will launch Notepad whenever the trigger fires&lt;/span&gt;
         td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\\test.log&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;));

         &lt;span style="color:Green;"&gt;// Register the task in the root folder&lt;/span&gt;
         ts.RootFolder.RegisterTaskDefinition(&lt;span style="color:#A31515;"&gt;@&amp;quot;Test&amp;quot;&lt;/span&gt;, td);

         &lt;span style="color:Green;"&gt;// Remove the task we just created&lt;/span&gt;
         ts.RootFolder.DeleteTask(&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;);
      }
   }
}
&lt;/pre&gt;&lt;/div&gt;If you really want to squeeze things into a single line of code (without any error handling):&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService().AddTask(&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;new&lt;/span&gt; DailyTrigger { DaysInterval = 2 }, &lt;span style="color:Blue;"&gt;new&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\\test.log&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;));
&lt;/pre&gt;&lt;/div&gt;For extended examples on how to the use the library, look in the source code area or look at the &lt;a href="http://taskscheduler.codeplex.com/wikipage?title=Examples&amp;referringTitle=Home"&gt;Examples Page&lt;/a&gt;. The library closely follows the Task Scheduler 2.0 Scripting classes. Microsoft has some examples on &lt;a href="http://msdn2.microsoft.com/en-us/library/aa384006(VS.85).aspx"&gt;MSDN&lt;/a&gt; around it that may further help you understand how to use this library.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>dahall</author><pubDate>Mon, 29 Oct 2012 14:51:44 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20121029025144P</guid></item><item><title>New Comment on "TriggerSamples"</title><link>http://taskscheduler.codeplex.com/wikipage?title=TriggerSamples&amp;ANCHOR#C24630</link><description>How can i hide promt window when executing Task&amp;#63;</description><author>urvashibaroda</author><pubDate>Mon, 06 Aug 2012 11:04:30 GMT</pubDate><guid isPermaLink="false">New Comment on "TriggerSamples" 20120806110430A</guid></item><item><title>Updated Wiki: Examples</title><link>http://taskscheduler.codeplex.com/wikipage?title=Examples&amp;version=8</link><description>&lt;div class="wikidoc"&gt;Below are some examples of how to use most of the functions of the library:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="#editor"&gt;Using the editor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#simple"&gt;Simple example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#enum"&gt;Enumerate all tasks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#complex"&gt;Complex example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#history"&gt;Task history example&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;Using the editor&lt;/b&gt;&lt;a name="editor"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Get the service on the local machine&lt;/span&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; (TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService())
{
   &lt;span style="color:Green;"&gt;// Create a new task&lt;/span&gt;
   &lt;span style="color:Blue;"&gt;const&lt;/span&gt; &lt;span style="color:Blue;"&gt;string&lt;/span&gt; taskName = &lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;;
   Task t = ts.AddTask(taskName, 
      &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TimeTrigger() { StartBoundary = DateTime.Now + TimeSpan.FromHours(1), Enabled = &lt;span style="color:Blue;"&gt;false&lt;/span&gt; },
      &lt;span style="color:Blue;"&gt;new&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\\test.log&amp;quot;&lt;/span&gt;, &amp;quot;C:\\&amp;quot;));

   &lt;span style="color:Green;"&gt;// Edit task and re-register if user clicks Ok&lt;/span&gt;
   TaskEditDialog editorForm = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskEditDialog();
   editorForm.Editable = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
   editorForm.RegisterTaskOnAccept = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
   editorForm.Initialize(t);
   &lt;span style="color:Green;"&gt;// ** The four lines above can be replaced by using the full constructor -- TaskEditDialog(t, true, true)&lt;/span&gt;
   editorForm.ShowDialog();

   &lt;span style="color:Green;"&gt;// Remove the task we just created&lt;/span&gt;
   ts.RootFolder.DeleteTask(taskName);
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Simple example&lt;/b&gt;&lt;a name="simple"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Green;"&gt;// Get the service on the local machine&lt;/span&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; (TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService())
{
   &lt;span style="color:Green;"&gt;// Create a new task definition and assign properties&lt;/span&gt;
   TaskDefinition td = ts.NewTask();
   td.RegistrationInfo.Description = &lt;span style="color:#A31515;"&gt;&amp;quot;Does something&amp;quot;&lt;/span&gt;;
   td.Principal.LogonType = TaskLogonType.InteractiveToken;

   &lt;span style="color:Green;"&gt;// Add a trigger that will fire the task at this time every other day&lt;/span&gt;
   DailyTrigger dt = (DailyTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; DailyTrigger { DaysInterval = 2 });
   dt.Repetition.Duration = TimeSpan.FromHours(4);
   dt.Repetition.Interval = TimeSpan.FromHours(1);

   &lt;span style="color:Green;"&gt;// Add a trigger that will fire every week on Friday&lt;/span&gt;
   td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; WeeklyTrigger { StartBoundary = DateTime.Today + TimeSpan.FromHours(2), DaysOfWeek = DaysOfTheWeek.Friday });

   &lt;span style="color:Green;"&gt;// Add an action that will launch Notepad whenever the trigger fires&lt;/span&gt;
   td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\\test.log&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;));

   &lt;span style="color:Green;"&gt;// Register the task in the root folder&lt;/span&gt;
   &lt;span style="color:Blue;"&gt;const&lt;/span&gt; &lt;span style="color:Blue;"&gt;string&lt;/span&gt; taskName = &lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;;
   ts.RootFolder.RegisterTaskDefinition(taskName, td);

   &lt;span style="color:Green;"&gt;// Retrieve the task, change the trigger and re-register it&lt;/span&gt;
   Task t = ts.GetTask(taskName);
   td = t.Definition;
   td.Triggers[0].StartBoundary = DateTime.Today + TimeSpan.FromDays(7);
   ts.RootFolder.RegisterTaskDefinition(taskName, td);

   &lt;span style="color:Green;"&gt;// Remove the task we just created&lt;/span&gt;
   ts.RootFolder.DeleteTask(taskName);
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Enumerate all tasks&lt;/b&gt;&lt;a name="enum"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;void&lt;/span&gt; EnumAllTasks()
{
   &lt;span style="color:Blue;"&gt;using&lt;/span&gt; (TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService())
      EnumFolderTasks(ts.RootFolder);
}

&lt;span style="color:Blue;"&gt;void&lt;/span&gt; EnumFolderTasks(TaskFolder fld)
{
   &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (Task task &lt;span style="color:Blue;"&gt;in&lt;/span&gt; fld.Tasks)
      ActOnTask(task);
   &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (TaskFolder sfld &lt;span style="color:Blue;"&gt;in&lt;/span&gt; fld.SubFolders)
      EnumFolderTasks(sfld);
}

&lt;span style="color:Blue;"&gt;void&lt;/span&gt; ActOnTask(Task t)
{
   &lt;span style="color:Green;"&gt;// Do something interesting here&lt;/span&gt;
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Complex example&lt;/b&gt;&lt;a name="complex"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;string&lt;/span&gt; user = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
&lt;span style="color:Blue;"&gt;bool&lt;/span&gt; preWin7 = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;

&lt;span style="color:Green;"&gt;// Get the service on the local machine&lt;/span&gt;
&lt;span style="color:Blue;"&gt;using&lt;/span&gt; (TaskService ts = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskService())
{
   &lt;span style="color:Green;"&gt;// Display version and server state&lt;/span&gt;
   Version ver = ts.HighestSupportedVersion;
   &lt;span style="color:Blue;"&gt;bool&lt;/span&gt; newVer = (ver &amp;gt;= &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Version(1, 2));
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Highest version: &amp;quot;&lt;/span&gt; + ver);
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Server: {0} ({1})&amp;quot;&lt;/span&gt;, ts.TargetServer, ts.Connected ? &lt;span style="color:#A31515;"&gt;&amp;quot;Connected&amp;quot;&lt;/span&gt; : &lt;span style="color:#A31515;"&gt;&amp;quot;Disconnected&amp;quot;&lt;/span&gt;);

   &lt;span style="color:Green;"&gt;// Output all of the running tasks&lt;/span&gt;
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;Running tasks:&amp;quot;&lt;/span&gt;);
   &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (RunningTask rt &lt;span style="color:Blue;"&gt;in&lt;/span&gt; ts.GetRunningTasks(&lt;span style="color:Blue;"&gt;true&lt;/span&gt;))
   {
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (rt != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
      {
         Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;+ {0}, {1} ({2})&amp;quot;&lt;/span&gt;, rt.Name, rt.Path, rt.State);
         &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (ver.Minor &amp;gt; 0)
            Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;  Current Action: &amp;quot;&lt;/span&gt; + rt.CurrentAction);
      }
   }

   &lt;span style="color:Green;"&gt;// Output all the tasks in the root folder with their triggers and actions&lt;/span&gt;
   TaskFolder tf = ts.RootFolder;
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nRoot folder tasks ({0}):&amp;quot;&lt;/span&gt;, tf.Tasks.Count);
   &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (Task t &lt;span style="color:Blue;"&gt;in&lt;/span&gt; tf.Tasks)
   {
      &lt;span style="color:Blue;"&gt;try&lt;/span&gt;
      {
         Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;+ {0}, {1} ({2})&amp;quot;&lt;/span&gt;, t.Name, t.Definition.RegistrationInfo.Author, t.State);
         &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (Trigger trg &lt;span style="color:Blue;"&gt;in&lt;/span&gt; t.Definition.Triggers)
            Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot; + {0}&amp;quot;&lt;/span&gt;, trg);
         &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (Action act &lt;span style="color:Blue;"&gt;in&lt;/span&gt; t.Definition.Actions)
            Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot; = {0}&amp;quot;&lt;/span&gt;, act);
      }
      &lt;span style="color:Blue;"&gt;catch&lt;/span&gt; { }
   }

   &lt;span style="color:Green;"&gt;// Output an enumeration of all folders under the root&lt;/span&gt;
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\n***Checking folder enum***&amp;quot;&lt;/span&gt;);
   TaskFolderCollection tfs = tf.SubFolders;
   &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (tfs.Count &amp;gt; 0)
   {
      Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nSub folders:&amp;quot;&lt;/span&gt;);
      &lt;span style="color:Blue;"&gt;try&lt;/span&gt;
      {
         &lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (TaskFolder sf &lt;span style="color:Blue;"&gt;in&lt;/span&gt; tfs)
            Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;+ {0}&amp;quot;&lt;/span&gt;, sf.Path);
      }
      &lt;span style="color:Blue;"&gt;catch&lt;/span&gt; (Exception ex)
      {
         Console.WriteLine(ex.ToString());
      }
   }

   &lt;span style="color:Green;"&gt;// Display information about the Microsoft folder&lt;/span&gt;
   &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer)
   {
      Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\n***Checking folder retrieval***&amp;quot;&lt;/span&gt;);
      &lt;span style="color:Blue;"&gt;try&lt;/span&gt;
      {
         TaskFolder sub = tf.SubFolders[&lt;span style="color:#A31515;"&gt;&amp;quot;Microsoft&amp;quot;&lt;/span&gt;];
         Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nSubfolder path: &amp;quot;&lt;/span&gt; + sub.Path);
      }
      &lt;span style="color:Blue;"&gt;catch&lt;/span&gt; (NotSupportedException) { }
      &lt;span style="color:Blue;"&gt;catch&lt;/span&gt; (Exception ex)
      {
         Console.WriteLine(ex.ToString());
      }
   }

   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\n***Checking task creation***&amp;quot;&lt;/span&gt;);
   &lt;span style="color:Blue;"&gt;try&lt;/span&gt;
   {
      &lt;span style="color:Green;"&gt;// Create a new task definition and assign properties&lt;/span&gt;
      TaskDefinition td = ts.NewTask();
      td.Data = &lt;span style="color:#A31515;"&gt;&amp;quot;Your data&amp;quot;&lt;/span&gt;;
      td.Principal.UserId = user;
      td.Principal.LogonType = TaskLogonType.InteractiveToken;
      td.RegistrationInfo.Author = &lt;span style="color:#A31515;"&gt;&amp;quot;dahall&amp;quot;&lt;/span&gt;;
      td.RegistrationInfo.Description = &lt;span style="color:#A31515;"&gt;&amp;quot;Does something&amp;quot;&lt;/span&gt;;
      td.RegistrationInfo.Documentation = &lt;span style="color:#A31515;"&gt;&amp;quot;Don&amp;#39;t pretend this is real.&amp;quot;&lt;/span&gt;;
      td.Settings.DisallowStartIfOnBatteries = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
      td.Settings.Enabled = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.ExecutionTimeLimit = TimeSpan.FromHours(2);
      td.Settings.Hidden = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.IdleSettings.IdleDuration = TimeSpan.FromMinutes(20);
      td.Settings.IdleSettings.RestartOnIdle = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.IdleSettings.StopOnIdleEnd = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.IdleSettings.WaitTimeout = TimeSpan.FromMinutes(10);
      td.Settings.Priority = System.Diagnostics.ProcessPriorityClass.Normal;
      td.Settings.RunOnlyIfIdle = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.RunOnlyIfNetworkAvailable = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
      td.Settings.StopIfGoingOnBatteries = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer)
      {
         td.Principal.RunLevel = TaskRunLevel.Highest; &lt;span style="color:Green;"&gt;//.LUA;&lt;/span&gt;
         &lt;span style="color:Green;"&gt;//td.RegistrationInfo.SecurityDescriptorSddlForm = &amp;quot;O:COG:CGD::(A;;RPWPCCDCLCSWRCWDWOGA;;;S-1-0-0)&amp;quot;;&lt;/span&gt;
         td.RegistrationInfo.Source = &lt;span style="color:#A31515;"&gt;&amp;quot;Test App&amp;quot;&lt;/span&gt;;
         td.RegistrationInfo.URI = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Uri(&lt;span style="color:#A31515;"&gt;&amp;quot;test://app&amp;quot;&lt;/span&gt;);
         td.RegistrationInfo.Version = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; Version(0, 9);
         td.Settings.AllowDemandStart = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
         td.Settings.AllowHardTerminate = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
         td.Settings.Compatibility = TaskCompatibility.V2;
         td.Settings.DeleteExpiredTaskAfter = TimeSpan.FromMinutes(1);
         td.Settings.MultipleInstances = TaskInstancesPolicy.StopExisting;
         td.Settings.StartWhenAvailable = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
         td.Settings.WakeToRun = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
         td.Settings.RestartCount = 5;
         td.Settings.RestartInterval = TimeSpan.FromSeconds(100);
      }

      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (preWin7)
      {
         &lt;span style="color:Green;"&gt;// Create a trigger that fires 5 minutes after the system is booted&lt;/span&gt;
         BootTrigger bTrigger = (BootTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; BootTrigger { Enabled = &lt;span style="color:Blue;"&gt;false&lt;/span&gt; });
         &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) bTrigger.Delay = TimeSpan.FromMinutes(5);
      }

      &lt;span style="color:Green;"&gt;// Create a trigger that fires every other day randomly between 6:00 a.m. and 8:00 a.m.&lt;/span&gt;
      DailyTrigger dTrigger = (DailyTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; DailyTrigger());
      dTrigger.StartBoundary = DateTime.Today + TimeSpan.FromHours(6);
      dTrigger.DaysInterval = 2;
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) dTrigger.RandomDelay = TimeSpan.FromHours(2);

      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer)
      {
         &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (preWin7)
         {
            &lt;span style="color:Green;"&gt;// Create a trigger that will fire on a system security event&lt;/span&gt;
            EventTrigger eTrigger = (EventTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; EventTrigger());
            eTrigger.SetBasic(&lt;span style="color:#A31515;"&gt;&amp;quot;Security&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;VSSAudit&amp;quot;&lt;/span&gt;, 25);
            eTrigger.ValueQueries.Add(&lt;span style="color:#A31515;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;Value&amp;quot;&lt;/span&gt;);
         }

         &lt;span style="color:Green;"&gt;// Create a trigger that fires 5 minutes after this task is registered&lt;/span&gt;
         td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; RegistrationTrigger { Delay = TimeSpan.FromMinutes(5) });

         &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (preWin7)
         {
            &lt;span style="color:Green;"&gt;// Create triggers that fire after various system states are changed&lt;/span&gt;
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.ConsoleConnect, UserId = user });
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.ConsoleDisconnect });
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.RemoteConnect });
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.RemoteDisconnect });
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.SessionLock, UserId = user });
            td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; SessionStateChangeTrigger { StateChange = TaskSessionStateChangeType.SessionUnlock });
         }
      }

      &lt;span style="color:Green;"&gt;// Create a trigger that fires when the system is idle&lt;/span&gt;
      td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; IdleTrigger());

      &lt;span style="color:Green;"&gt;// Create a trigger that fires 15 minutes after the current user logs on and then every 1000 seconds after that&lt;/span&gt;
      LogonTrigger lTrigger = (LogonTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; LogonTrigger());
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer)
      {
         lTrigger.Delay = TimeSpan.FromMinutes(15);
         lTrigger.UserId = user;
         lTrigger.Repetition.Interval = TimeSpan.FromSeconds(1000);
      }

      &lt;span style="color:Green;"&gt;// Create a trigger that fires on the 3rd, 6th, 10th, 18th, and last days of July and November and stops triggering 90 days from now&lt;/span&gt;
      MonthlyTrigger mTrigger = (MonthlyTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MonthlyTrigger());
      mTrigger.DaysOfMonth = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; &lt;span style="color:Blue;"&gt;int&lt;/span&gt;[] { 3, 6, 10, 18 };
      mTrigger.MonthsOfYear = MonthsOfTheYear.July | MonthsOfTheYear.November;
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) mTrigger.RunOnLastDayOfMonth = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
      mTrigger.EndBoundary = DateTime.Today + TimeSpan.FromDays(90);

      &lt;span style="color:Green;"&gt;// Create a trigger that fires every day of the first and last week of December and January&lt;/span&gt;
      MonthlyDOWTrigger mdTrigger = (MonthlyDOWTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MonthlyDOWTrigger());
      mdTrigger.DaysOfWeek = DaysOfTheWeek.AllDays;
      mdTrigger.MonthsOfYear = MonthsOfTheYear.January | MonthsOfTheYear.December;
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) mdTrigger.RunOnLastWeekOfMonth = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;
      mdTrigger.WeeksOfMonth = WhichWeek.FirstWeek;

      &lt;span style="color:Green;"&gt;// Create a trigger that fires 1 minute from now and then every 15 minutes for the next 7 days.&lt;/span&gt;
      TimeTrigger tTrigger = (TimeTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; TimeTrigger());
      tTrigger.StartBoundary = DateTime.Now + TimeSpan.FromMinutes(1);
      tTrigger.EndBoundary = DateTime.Today + TimeSpan.FromDays(7);
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) tTrigger.ExecutionTimeLimit = TimeSpan.FromSeconds(15);
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer) tTrigger.Id = &lt;span style="color:#A31515;"&gt;&amp;quot;Time test&amp;quot;&lt;/span&gt;;
      tTrigger.Repetition.Duration = TimeSpan.FromMinutes(20);
      tTrigger.Repetition.Interval = TimeSpan.FromMinutes(15);
      tTrigger.Repetition.StopAtDurationEnd = &lt;span style="color:Blue;"&gt;true&lt;/span&gt;;

      &lt;span style="color:Green;"&gt;// Create a trigger that fires every third week on Monday&lt;/span&gt;
      WeeklyTrigger wTrigger = (WeeklyTrigger)td.Triggers.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; WeeklyTrigger());
      wTrigger.DaysOfWeek = DaysOfTheWeek.Monday;
      wTrigger.WeeksInterval = 3;

      &lt;span style="color:Green;"&gt;// Create an action which opens a log file in notepad&lt;/span&gt;
      td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ExecAction(&lt;span style="color:#A31515;"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;c:\\test.log&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;));
      &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (newVer)
      {
         &lt;span style="color:Green;"&gt;// Create an action which shows a message to the interactive user&lt;/span&gt;
         td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ShowMessageAction(&lt;span style="color:#A31515;"&gt;&amp;quot;Running Notepad&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;Info&amp;quot;&lt;/span&gt;));
         &lt;span style="color:Green;"&gt;// Create an action which sends an email&lt;/span&gt;
         td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; EmailAction(&lt;span style="color:#A31515;"&gt;&amp;quot;Testing&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;dahall@codeplex.com&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;user@test.com&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;You&amp;#39;ve got mail.&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;mail.myisp.com&amp;quot;&lt;/span&gt;));
         &lt;span style="color:Green;"&gt;// Create an action which loads a COM object and calls the ITaskHandler interface&lt;/span&gt;
         td.Actions.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ComHandlerAction(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; Guid(&lt;span style="color:#A31515;"&gt;&amp;quot;CE7D4428-8A77-4c5d-8A13-5CAB5D1EC734&amp;quot;&lt;/span&gt;), &lt;span style="color:Blue;"&gt;string&lt;/span&gt;.Empty));
      }

      &lt;span style="color:Green;"&gt;// Register the task definition (saves it) in the security context of the interactive user&lt;/span&gt;
      tf.RegisterTaskDefinition(&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;, td, TaskCreation.CreateOrUpdate, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;, TaskLogonType.InteractiveToken, &lt;span style="color:Blue;"&gt;null&lt;/span&gt;);
   }
   &lt;span style="color:Blue;"&gt;catch&lt;/span&gt; (Exception ex)
   {
      Console.WriteLine(ex.ToString());
   }

   &lt;span style="color:Green;"&gt;// Display information about the newly created task&lt;/span&gt;
   Task runningTask = tf.Tasks[&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;];
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nNew task will run at &amp;quot;&lt;/span&gt; + runningTask.NextRunTime);
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nNew task triggers:&amp;quot;&lt;/span&gt;);
   &lt;span style="color:Blue;"&gt;for&lt;/span&gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; runningTask.Definition.Triggers.Count; i++)
      Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;  {0}: {1}&amp;quot;&lt;/span&gt;, i, runningTask.Definition.Triggers[i]);
   Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;\nNew task actions:&amp;quot;&lt;/span&gt;);
   &lt;span style="color:Blue;"&gt;for&lt;/span&gt; (&lt;span style="color:Blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; runningTask.Definition.Actions.Count; i++)
      Console.WriteLine(&lt;span style="color:#A31515;"&gt;&amp;quot;  {0}: {1}&amp;quot;&lt;/span&gt;, i, runningTask.Definition.Actions[i]);

   &lt;span style="color:Green;"&gt;// Remove the task we just created since this was just a test&lt;/span&gt;
   tf.DeleteTask(&lt;span style="color:#A31515;"&gt;&amp;quot;Test&amp;quot;&lt;/span&gt;);
}
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Task history example&lt;/b&gt;&lt;a name="history"&gt;&lt;/a&gt;&lt;br /&gt;Only works with release 1.6.2 or source code drop 66948 and later and requires the inclusion of the TaskSchedulerEditor assembly.&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
TaskEventLog log = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; TaskEventLog(task.Path);
List&amp;lt;ListViewItem&amp;gt; c = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; List&amp;lt;ListViewItem&amp;gt;(100);
&lt;span style="color:Blue;"&gt;foreach&lt;/span&gt; (TaskEvent item &lt;span style="color:Blue;"&gt;in&lt;/span&gt; log)
   c.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; ListViewItem(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; &lt;span style="color:Blue;"&gt;string&lt;/span&gt;[] { item.Level, item.TimeCreated.ToString(), item.EventId.ToString(),
      item.TaskCategory, item.OpCode, item.ActivityId.ToString() }));
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>dahall</author><pubDate>Mon, 02 Jul 2012 17:32:02 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Examples 20120702053202P</guid></item><item><title>New Comment on "Documentation"</title><link>http://taskscheduler.codeplex.com/documentation?&amp;ANCHOR#C23465</link><description>Don&amp;#39;t use the UserId property. Instead call the RegisterTaskDefinition method with &amp;#34;SYSTEM&amp;#34; as the user, null as the password, and  TaskLogonType.ServiceAccount for the type.</description><author>dahall</author><pubDate>Fri, 27 Apr 2012 16:16:07 GMT</pubDate><guid isPermaLink="false">New Comment on "Documentation" 20120427041607P</guid></item><item><title>New Comment on "Examples"</title><link>http://taskscheduler.codeplex.com/wikipage?title=Examples&amp;ANCHOR#C23463</link><description>I&amp;#39;ve been trying this and it works great but I&amp;#39;m struggling with something.&amp;#10;I want to create scheduled tasks that run under the system account on both Windows 2008 and 2003.&amp;#10;If I create a task and use ...Principal.UserId &amp;#61; &amp;#34;SYSTEM&amp;#34;&amp;#59; it works for 2008 but not for 2003.&amp;#10;What am I doing wrong&amp;#63;&amp;#10;Rick</description><author>RickBowden</author><pubDate>Fri, 27 Apr 2012 12:05:59 GMT</pubDate><guid isPermaLink="false">New Comment on "Examples" 20120427120559P</guid></item></channel></rss>