使用 windows 计划任务及时调用控制台应用程序。这是一种有效的方法吗

Posted

技术标签:

【中文标题】使用 windows 计划任务及时调用控制台应用程序。这是一种有效的方法吗【英文标题】:Calling a console application on timely basis using windows scheduled task . Is this a valid approach 【发布时间】:2016-04-17 20:16:04 【问题描述】:

这是关于 ASP.NET MVC 背景的。当我需要及时调用action方法时,我会使用HangFire这样的第三部分工具,它运行在应用程序池下。我想创建一个同步作业,它读取我们的 ERP 系统生成的 .csv 文件并更新我们的自定义数据库。 但我知道在我的 ASP.NET MVC 中将此同步作业作为一种操作方法并不是正确的做事方式,因为后台作业不应该是我的 Web 应用程序的一部分。

所以为了处理我的同步工作,我做了以下事情:

    使用 Visual Studio 2012,我创建了一个新的控制台应用程序,并在其主要方法中编写了如下同步作业:-

    class Program
    
        static void Main(string[] args)
        
            using (Entities sd = new Entities())
            
                //code goes here
                sd.SaveChanges();
            
        
    
    
    如何及时调用此控制台应用程序?我正在考虑使用 Windows 任务调度程序创建一个新任务,该任务将每小时执行一次并调用应用程序,主要调用 .application 文件?

【问题讨论】:

【参考方案1】:

现在我的问题是如何及时调用此控制台应用程序? .我正在考虑使用 windows 任务调度程序创建一个新任务,它将每小时执行一次并调用应用程序,主要调用 .application 文件?

运行程序是 Windows 任务计划程序 (TS) 的目标之一。所以是的,请务必使用 TS。

使用 TS 的其他好处是:

能够指定用户帐户来运行进程下 有多种方法可以指定何时运行任务的触发器 控制任务是否应运行的条件机制(计算机空闲;省电) 以及运行时任务的精彩历史记录

另一种方法是创建您自己的调度服务来运行您的应用,但这种选择不赞成,原因是:

    重新发明*** Windows 充斥着大量专有任务调度服务,它们基本上都在做同样的事情。

Web 应用程序中的后台作业

虽然可以说可以在 ASP.NET 中生成/调度一个后台线程/工作项来调用一些 c# 代码,但这里的危险是 IIS 不知道您已经这样做了。由于网络不活动,它可能会决定暂停或回收您的应用程序池,然后您的计划作业将被发送到无效。所以为什么不推荐。

现在您可以随时告诉 IIS 不要让您的应用程序池超时,这样它就不会被定期回收,但我怀疑这会导致其他问题。

一开始最好不要这样做。

但是,在 ASP.NET 中使用任务计划程序 API 来安排操作以运行例如 控制台应用程序并没有错。

【讨论】:

看来 TS 是要走的路,但不确定我是否可以创建一个简单的 Web 应用程序,比如说一个 asp.net mvc,它允许用户更改 TS 任务调度程序?这可能吗? @JohnJohn 是的。有一个Task Scheduler COM API 非常感谢您非常有帮助的回复。所以一般来说我可以创建我的控制台应用程序,然后我可以创建一个 Web 应用程序,用户可以从 Web 应用程序登录到 Web 应用程序并更改运行控制台应用程序的 TS 设置? @JohnJohn 不客气。这是完全正确的。 :) 我已经修改了上面的答案以包括这些花絮 @JohnJohn 没错。您的 IIS 代码仅告诉 TS 运行什么以及何时运行,您还可以指定在哪个用户帐户下运行,这有点整洁。 TS 独立于 IIS。【参考方案2】:

Windows 任务调度程序是调用 .net 控制台应用程序的一种完全有效的方式。我有几个我写的和支持的,已经运行了多年,没有问题。

【讨论】:

好的,感谢您的回复,那么您是否也反对在我的 asp.net mvc Web 应用程序中将这样的同步作业作为操作方法运行?最好将同步作业作为控制台应用程序?

以上是关于使用 windows 计划任务及时调用控制台应用程序。这是一种有效的方法吗的主要内容,如果未能解决你的问题,请参考以下文章

通过 Windows 任务计划程序调用 SSIS 包时,发送邮件任务在 SSIS 中不起作用

怎么在windows 服务程序里面调用一个控制台的程序

如何使用 Windows 任务计划程序执行 .Net Core 2.0 控制台应用程序?

为 Windows 开发计划任务

Windows任务计划程序启动程序时如何获取应用程序文件夹

如何使用 Inno Setup 添加计划任务