你怎么知道它是在运行,启用/禁用等?
答案 0 :(得分:6)
您可以使用Task Scheduler API来访问有关任务的信息。 (它是一个com库,但您可以使用pinvokes从C#调用它)
有article on codeproject为API提供.net包装。
答案 1 :(得分:3)
可以安装via NuGet API。程序包名称为“ TaskScheduler”。 (https://github.com/dahall/taskscheduler)
下面的示例显示如何测试是否使用任务名称安装了任务,如果没有安装,则每小时执行一次。
using (TaskService service = new TaskService())
{
if (!service.RootFolder.AllTasks.Any(t => t.Name == "YourScheduledTaskName"))
{
Console.WriteLine("YourScheduledTaskName is not installed on this system. Do you want to install it now? (y/n)");
var answer = Console.ReadLine();
if (answer == "y")
{
var task = service.NewTask();
task.RegistrationInfo.Description = "YourScheduledTaskDescription";
task.RegistrationInfo.Author = "YourAuthorName";
var hourlyTrigger = new DailyTrigger { StartBoundary = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 1, 0 , 0) };
hourlyTrigger.Repetition.Interval = TimeSpan.FromHours(1);
task.Triggers.Add(hourlyTrigger);
var taskExecutablePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "YourScheduledTaskName.exe");
task.Actions.Add(new ExecAction(taskExecutablePath));
service.RootFolder.RegisterTaskDefinition("YourScheduledTaskName", task);
}
}
}
答案 2 :(得分:1)
btw,IRT我接受的解决方案,这里是验证scheduledTask存在所需的CodeProject包装器代码(请参阅http://www.codeproject.com/KB/cs/tsnewlib.aspx)
我在集成测试中使用它,因此Assert是NUnit ..
public static void VerifyTask(string server, string scheduledTaskToFind)
{
ScheduledTasks st = new ScheduledTasks(server);
string[] taskNames = st.GetTaskNames();
List<string> jobs = new List<string>(taskNames);
Assert.IsTrue(jobs.Contains(scheduledTaskToFind), "unable to find " + scheduledTaskToFind);
st.Dispose();
}
要检查它是否已启用,您可以执行以下操作:
Task task = st.OpenTask(scheduledTaskToFind);
Assert.IsTrue(task.Status != TaskStatus.Disabled);