2013-10-31 100 views
3

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

回答

3

你可以将它设置为与1小时的间隔定时器运行。

请参阅此链接的例子 How do you add a timer to a C# console application

你也可以将它安装在用户的计算机上的Windows服务。

+1

服务是要走的路。 – Dan

+0

http://taskscheduler.codeplex.com/看起来每个人都应该工作。你能建议哪一个应该很容易实现?我不想过度杀人。 – user2901683

1

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

我保留了一些笔记...不知道如果这有助于:


的Quartz.Net指南我希望我有

Quartz.Net非常全功能,只要我会读。如果您使用调度程序,以便您可以推迟任务,或将前端与某些较长的后端处理分离,则可以非常轻松地完成。

大困惑我的是石英可以以多种方式使用。您可以将其嵌入到您自己的应用程序或服务等中。另一个混淆是官方教程可能会使用一些更新,以便代码示例可以使用当前版本。最后,配置对于.net用户来说似乎很陌生;我习惯做类似于:

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

通常我喜欢在LINQPad中探索一个新类。我将像上面那样实例化它,并且一直使用它,直到我在我的项目中使用它为止。

Quartz.Net的配置大约为外国对我的想象。但那是因为我忽略了使用Quartz.Net的最好的预建选项之一,而我忽略了Quartz上最好的教程之一。

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

当谈到时间要执行的任务,石英Windows服务将调用指定的方法(当然,它实现了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服务,Quartz服务会继续执行并在其本地系统上执行它们。