我知道如何「創建」一個服務應用程序。在.NET服務應用程序中,我應該在哪裏添加它應該執行的功能?
我知道在main()函數中寫什麼。我知道如何將EventLog(或其他組件)添加到服務。
我知道如何定義服務啓動,停止或恢復時發生的情況。
我想知道的是這個...
我希望我的Windows服務來執行某些功能(如索引文件)。
我在哪裏添加代碼以在Service應用程序中執行此功能?
我知道如何「創建」一個服務應用程序。在.NET服務應用程序中,我應該在哪裏添加它應該執行的功能?
我知道在main()函數中寫什麼。我知道如何將EventLog(或其他組件)添加到服務。
我知道如何定義服務啓動,停止或恢復時發生的情況。
我想知道的是這個...
我希望我的Windows服務來執行某些功能(如索引文件)。
我在哪裏添加代碼以在Service應用程序中執行此功能?
我的猜測是,你想索引每X分鐘,所以你可能想在服務的Start事件中設置一個Timer,然後在該計時器觸發時執行索引。
我打算假設「索引函數」指的是你所寫的庫函數,你希望通過windows服務來運行。如果是這種情況,請將您的代碼添加到此重寫方法中:
protected override void OnStart(String[] args)
{
// your stuff here
}
此代碼將在服務啓動時觸發。
就是這樣......?只需將我的代碼塊添加到OnStart中,而不必擔心執行我的代碼需要多長時間? – user57175 2009-01-26 13:47:07
是的,它會運行,只要它也需要。請記住,這可能非常危險,因爲它很方便。 – 2009-01-26 13:53:06
我會說這取決於你的索引函數應該運行的時間。如果它應該在服務啓動後立即開始運行,則可以在OnStart方法中調用該函數。如果它是由自定義事件啓動的,那麼您可以在處理程序中爲該事件調用它。如果需要在特定的時間間隔後調用該功能,則可能需要使用定時器。
我假設你想要的東西,將定期運行,而不是不斷。您可能需要考慮設置一個在到期時執行方法的計時器。計時器可以自動重置,或者您的回調可以在計時器完成時重置其下一次到期。您將在OnStart方法中初始化計時器。當服務暫停或停止時,您需要小心地停止計時器,並在關機時進行清理。
您可能還需要考慮降低服務的優先級,以避免搶先佔用系統上的前臺任務。
重複動作的服務的基礎上,System.Timers.Timer
的簡單的例子:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Timers;
namespace SrvControl
{
public partial class Service1 : ServiceBase
{
Timer mytimer;
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
if (mytimer == null)
mytimer = new Timer(5 * 1000.0);
mytimer.Elapsed += new ElapsedEventHandler(mytimer_Elapsed);
mytimer.Start();
}
void mytimer_Elapsed(object sender, ElapsedEventArgs e)
{
//Do Anything, e.g. write to eventlog
}
protected override void OnStop()
{
mytimer.Stop();
}
}
}
你能具體談談你的意思是「索引功能」呢? – 2009-01-26 12:41:49