【问题标题】:Create win task to run once and delete immediately using C#使用 C# 创建运行一次并立即删除的 win 任务
【发布时间】:2012-10-26 23:17:48
【问题描述】:

这是用例: - 新建一个win任务,立即运行,完成后删除任务。

这是使用 C# 创建任务的基本代码。

    using (TaskService ts = new TaskService(null))
    {
        string projectName = "runnowtest" + Guid.NewGuid().ToString();

        //create new task
        TaskDefinition td = ts.NewTask();
        Trigger mt = null;

        //setup task as Registration trigger
        mt = td.Triggers.AddNew(TaskTriggerType.Registration);
        mt.StartBoundary = DateTime.Now;

        //delete the task 1 minute after the program ends
        td.Settings.DeleteExpiredTaskAfter = new TimeSpan(0, 1, 0); 

        //run the notepad++ in the task
        td.Actions.Add(new ExecAction("notepad.exe"));

        //register task
        Task output = ts.RootFolder.RegisterTaskDefinition(projectName, td);

        //check output
        Console.WriteLine(output != null ? "Task created" : "Task not created");
    }

API 似乎没有将任务标记为运行一次的属性/标志。我试图确保上述任务只运行一次,然后立即删除。任何想法都非常感谢!

【问题讨论】:

  • 既然可以直接生成进程,为什么还要通过调度程序运行它?
  • @RowlandShaw 我知道我可以在没有调度程序的情况下直接运行任何进程。但是,我的问题是关于“使用 Task Scheduler API”来实现这一点。
  • 此解决方案不适用于 Task Scheduler V1.3。当 Version ver = ts.HighestSupportedVersion and Version.major = 1 and Version.Minor = 3 时抛出“Microsoft.Win32.TaskScheduler.NotV1SupportedException”异常。

标签: .net windows c#-4.0 scheduled-tasks


【解决方案1】:

您可以设置任务 XML 定义来设置 API 未直接公开的所有内容。

【讨论】:

    【解决方案2】:

    我知道它很旧,但仅供参考... 要使用DeleteExpiredTaskAfter需要给触发器EndBoundary:

    var trigger = new RegistrationTrigger{Delay = TimeSpan.FromSeconds(5), EndBoundary = DateTime.Now.Add(TimeSpan.FromSeconds(50))};
    

    【讨论】:

      猜你喜欢
      • 2022-10-06
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多