在没有Windows任务调度程序的情况下调度exe

时间:2015-12-02 14:55:08

标签: c# windows task scheduler

是否可以在不使用任何任务调度程序或SQL调度程序的情况下安排.exe文件? 我想要做的是我在C#中有一个文件,它是独立执行但没有任何任务调度程序或SQL调度程序。 这背后的原因是安全问题。

3 个答案:

答案 0 :(得分:1)

或者,您可以在自己的C#app中创建调度程序。

  1. 将您的应用构建为控制台应用
  2. 将您的逻辑包装到这样的自定义调度程序中。

     public class Schedule : ISchedule
    {
        readonly List<Timer> timers = new List<Timer>();
    
        public Schedule()
        {
        }
    
        public Timer Every(TimeSpan interval, Action action)
        {
            var timer = new Timer(_ => action(), null, new TimeSpan(), interval);
            timers.Add(timer);
            return timer;
        }
    
        public void Stop(Timer timer)
        {
            if (timer != null && timers.Contains(timer))
            {
                timer.Dispose();
                timers.Remove(timer);
            }
        }
    }
    
    public class MyMainClass
    {
       void Main(){
          var processor = new MyProcessor();    
    
          ISchedule scheduler = new Schedule();
          schedule.Every(TimeSpan.FromDays(1), processor.Run)
       }
    }
    
    public class MyProcessor
    {
       void Run(){
        //do more here
       }
     }
    
  3. 使用[Topshelf] [1]

    将应用程序安装为Windows服务

    [1]:https://github.com/Topshelf/Topshelf。 Topshelf允许您创建一个控制台应用程序,并通过简单的命令将其作为Windows服务安装/托管。

答案 1 :(得分:0)

您始终可以在任何地方部署可执行文件,并在注册表中创建启动条目:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

请参阅MSDN

这样,您的可执行文件将在Windows启动时启动,您可以以编程方式设置执行任务的时间。

答案 2 :(得分:0)

正如其他海报所提到的那样,至少给标准的任务调度程序路由另一种看起来可能是谨慎的,因为我无法想到避免它的任何安全优势 - 然后我再也不知道你的情况。

我确实有一个项目,我需要做类似的事情 - 系统需要运行用户添加的任务 - 要么尽快运行,要么在给定时间或以给定间隔运行的任务。

我将其设置为设置为在启动时运行的Windows服务。该服务只是等待一个间隔(通常约一分钟),然后检查数据库中是否有任何计划在最后一个滴答和当前之间运行的任务。任务在SQL数据库中维护。写作并不简单,但一旦实施似乎是可靠的。

一些注意事项 -
时间不准确 错误处理至关重要 - 确保单个任务无法取消流程 请小心处理边缘情况,以免最终在滴答之间丢弃任务

虽然我会小心过早地排除任务调度程序路由。