在.NET服务应用程序中,我在哪里添加它应该执行的功能?

时间:2009-01-26 12:38:39

标签: c# .net windows windows-services service

我知道如何“创建”服务应用程序。

我知道在main()函数中写什么。

我知道如何将EventLog(或其他组件)添加到服务中。

我知道如何定义服务启动,停止或恢复时会发生什么。

我想知道的是......

我希望我的Windows服务能够执行某些功能(例如索引文件)。

我在哪里添加代码以在服务应用程序中执行此功能?

5 个答案:

答案 0 :(得分:1)

我假设你想要的东西会定期运行,而不是经常运行。您可能需要考虑设置一个在到期时执行方法的计时器。计时器可以自动重置,或者您的回调可以在计时器完成时重置计时器以使其下一次到期。您将在OnStart方法中初始化计时器。暂停或停止服务时需要小心停止计时器,并在关机时清理。

您可能还需要考虑降低服务的优先级,以便它不会抢占系统上的前台任务。

答案 1 :(得分:0)

我的猜测是你想要每隔X分钟编制索引,所以你可能想在服务的Start事件中设置Timer,然后在该计时器触发时执行索引。

答案 2 :(得分:0)

我将假设通过“索引器功能”,您指的是您希望通过Windows服务运行的库函数。如果是这种情况,那么将代码添加到此覆盖方法:

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

服务启动时会触发此代码。

答案 3 :(得分:0)

我想说这取决于你的Indexer函数应该运行的时间。如果它应该在服务启动后立即开始运行,那么您将在OnStart方法中调用该函数。如果要作为自定义事件的结果启动,那么您将在该事件的处理程序中调用它。如果需要在特定的时间间隔后调用该函数,则可能需要使用Timer。

答案 4 :(得分: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();
    }
}
}