2013-10-31 107 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服務會繼續執行並在其本地系統上執行它們。