我有一个 C# 控制台应用程序。我想每天每小时运行一次。此应用程序不打算在我的本地机器上运行,而是在其他用户机器上作为后台进程运行。我不希望用户使用任务计划程序手动设置任务。我怎样才能为他实现同样的目标?
3 回答
您还可以使用 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 的教程。它真的很棒,因为我无法改进它,我只会链接到它。
将 Quartz.Net 安装为 Windows 服务并测试安装
Quartz.Net 编写你的第一个 Hello World 作业
基本上:
- 调整quartz.config 文件(类似于上面的代码)
- 以管理员身份安装 Quartz.Net 服务 (Quartz.Service.exe)
- 将要执行的代码的程序集(.exe 或 .dll)放在与 Quartz.Service.exe 相同的文件夹中
- 启动服务
- 进行调度呼叫。即,您的汇编代码将调用 Quartz 服务,然后该服务会在其本地系统上保持并执行它们。
创建服务应用程序:http: //msdn.microsoft.com/en-us/library/zt39148a.aspx