当前位置:编程学习 > C#/ASP.NET >>

C#:请教关于用Microsoft.Win32.TaskScheduler.dll 添加计划任务问题

    Windows Scheduled Tasks 计划任务可以定期执行任务,并且可以循环执行,在一些系统中,使用计划任务比我们创建Windows 服务,在其中使用Timer定时器来执行周期性任务更加的方便。微软针对各个系统平台开放了计划任务MSTASK的API,C/C++接口请参看MSDN文档:http://msdn.microsoft.com/zh-cn/library/aa446802。遗憾的是在.NET中并没有对这些接口进行封装,不过在CodePlex上,有开源的计划任务接口封装,详情参考:Task Scheduler Managed Wrapper。

   而我在开发过程中,用这个Microsoft.Win32.TaskScheduler.dll可以成功的在win7下添加任务并能按设定条件成功执行,同样的代码在XP下则不能。
   于是又继续找技术资料,发现了1.3版的TaskScheduler.dll,这个可新建,只要在系统默认的任务查询器上勾选“仅在登陆后运行”,则可成功执行,相反。
   问题1:用TaskScheduler.dll时,能不能在C#代码中勾选“仅在登陆后运行”这个复选框(XP系统)?
   问题2:能不能只用Microsoft.Win32.TaskScheduler.dll(2.0)既能在WIN7下新建并执行,也能在XP下胜任。
   Code:Microsoft.Win32.TaskScheduler.dll

        private static void CreateTask()
        {
            var ts = new TaskService();

            var td = ts.NewTask();
            td.RegistrationInfo.Description = "Alert Message To User Task";
            td.RegistrationInfo.Author = "Deepres";
            td.RegistrationInfo.URI = "http://blog.sina.com.cn/";
            
            Trigger dt = new DailyTrigger { DaysInterval = 1 };
            dt.ExecutionTimeLimit = TimeSpan.FromHours(1);
            dt.StartBoundary = DateTime.Now.AddMinutes(3);
            dt.Repetition.Duration = TimeSpan.FromHours(24);
            dt.Repetition.Interval = TimeSpan.FromMinutes(30);
            
            td.Triggers.Add(dt);

            var sPath = Common.StrDecode(Cah.ReadValue("NavAppUrl", "NavAUrl"));
            var exe = new ExecAction(sPath);

            td.Actions.Add(exe);

            ts.RootFolder.RegisterTaskDefinition(@"AlertMsgToUser", td);
        }

   Code:TaskScheduler.dll

public static void CreateTask(string name)
       {
           try
           {
               var st = new ScheduledTasks();
               var t = st.CreateTask(name);
               var sPath = Common.StrDecode(Cah.ReadValue("NavAppUrl", "NavAUrl"));
               t.ApplicationName = sPath;
               t.Comment = "Alert a message to on logon user";

               t.SetAccountInformation(@"NT AUTHORITY\SYSTEM", "");

               t.IdleWaitMinutes = 10;

               // Allow the task to run for no more than 2 hours, 30 minutes.
               //t.MaxRunTime = new TimeSpan(2, 30, 0);

               t.Priority = System.Diagnostics.ProcessPriorityClass.Idle;

               t.Triggers.Add(new DailyTrigger(14, 30));

               t.Save();
               t.Close();
               st.Dispose();
           }
           catch (Exception ex)
           {
               Common.WriteUserLogs("erro", ex.Message);
           }
       }
C# .net 计划任务 TaskScheduler --------------------编程问答-------------------- 没人帮我吗?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,