2009-01-26 30 views
0

我知道如何「創建」一個服務應用程序。在.NET服務應用程序中,我應該在哪裏添加它應該執行的功能?

我知道在main()函數中寫什麼。我知道如何將EventLog(或其他組件)添加到服務。

我知道如何定義服務啓動,停止或恢復時發生的情況。

我想知道的是這個...

我希望我的Windows服務來執行某些功能(如索引文件)。

我在哪裏添加代碼以在Service應用程序中執行此功能?

+0

你能具體談談你的意思是「索引功能」呢? – 2009-01-26 12:41:49

回答

0

我的猜測是,你想索引每X分鐘,所以你可能想在服務的Start事件中設置一個Timer,然後在該計時器觸發時執行索引。

0

我打算假設「索引函數」指的是你所寫的庫函數,你希望通過windows服務來運行。如果是這種情況,請將您的代碼添加到此重寫方法中:

protected override void OnStart(String[] args) 
{ 
    // your stuff here 
} 

此代碼將在服務啓動時觸發。

+0

就是這樣......?只需將我的代碼塊添加到OnStart中,而不必擔心執行我的代碼需要多長時間? – user57175 2009-01-26 13:47:07

+0

是的,它會運行,只要它也需要。請記住,這可能非常危險,因爲它很方便。 – 2009-01-26 13:53:06

0

我會說這取決於你的索引函數應該運行的時間。如果它應該在服務啓動後立即開始運行,則可以在OnStart方法中調用該函數。如果它是由自定義事件啓動的,那麼您可以在處理程序中爲該事件調用它。如果需要在特定的時間間隔後調用該功能,則可能需要使用定時器。

1

我假設你想要的東西,將定期運行,而不是不斷。您可能需要考慮設置一個在到期時執行方法的計時器。計時器可以自動重置,或者您的回調可以在計時器完成時重置其下一次到期。您將在OnStart方法中初始化計時器。當服務暫停或停止時,您需要小心地停止計時器,並在關機時進行清理。

您可能還需要考慮降低服務的優先級,以避免搶先佔用系統上的前臺任務。

0

重複動作的服務的基礎上,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(); 
    } 
} 
} 
相關問題