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
C# .net 计划任务 TaskScheduler --------------------编程问答-------------------- 没人帮我吗?
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);
}
}
补充:.NET技术 , C#