安排任务c#

时间:2013-10-31 04:20:08

标签: c# scheduled-tasks

我有一个C#控制台应用程序。我想在一天中的每个小时运行。此应用程序不能在我的本地计算机上运行,​​而是在其他用户计算机上作为后台进程运行。我不希望用户使用任务调度程序手动设置任务。我怎样才能为他做到这一点?

2 个答案:

答案 0 :(得分:1)

您还可以使用Quartz.net调度服务;它以最简单的形式安装为Windows服务,并在XML文件中配置计划。然后,您可以在预定时间调用代码。

我保留了一些笔记......不确定这是否有帮助:


Quartz.Net指南我希望我有

就我所知,Quartz.Net非常全面。如果您使用调度程序以便可以推迟任务,或者将前端与一些相当长的后端处理分离,则可以非常轻松地完成。

对我来说很大的困惑是Quartz可以在很多方面使用。你可以将它嵌入你自己的应用程序或服务等等。另一个困惑是官方教程可以使用一些更新,以便代码示例可以使用当前版本。最后,配置对于.net用户来说似乎很陌生;我习惯于这样做:

var myObject = new SuperUsefulClass();
myObject.ImportantSetting = SettingEnumeration.SomeValueThatIntellisenseSuggests;
myObject.OtherSetting = OtherSettingEnumeration.SomeValueThatIntellisenseSuggests;

通常我喜欢在LINQPad中探索一个新类。我将如上所述进行实例化,并使用它直到我习惯在我的项目中使用它。

Quartz.Net的配置对我来说和我想象的一样陌生。但那是因为我忽略了使用Quartz.Net的最佳预建选项之一,而我忽略了Quartz上最好的教程之一。

对于我的用例,推迟任务,我最终意识到使用Quartz的最简单方法是使用预构建的Windows服务。为此,我只修改了一个示例配置文件,并选择将所有作业,作业元数据等保存到SQL Server数据库。

当需要执行作业时,Quartz Windows Service将调用指定的方法(当然,它实现了IJob接口)。为了调用该方法,您的.dll或.exe(.net用语中的“程序集”)必须位于安装服务(Quartz.Service.exe)的同一文件夹中。然后它神奇地调用程序集中的方法。当然,如果您的方法读取外部文件,那么这些文件也必须复制到服务文件夹,或者由程序集以某种方式访问​​。

在几乎放弃之后,我遇到了Tarun Arora的教程。它真的很棒,因为我无法改进它,我只是链接到它。

Install Quartz.Net as a windows service and Test installation

Quartz.Net Writing your first Hello World Job

基本上:

  1. 调整quartz.config文件(类似于上面的代码)
  2. 以管理员身份安装Quartz.Net服务(Quartz.Service.exe)
  3. 将要执行的代码的程序集(.exe或.dll)放在与Quartz.Service.exe相同的文件夹中
  4. 启动服务
  5. 拨打电话。即您的汇编代码将调用Quartz Service,然后Quartz Service会在其上继续执行它们 本地系统。

答案 1 :(得分:0)