我知道如何“创建”服务应用程序。
我知道在main()函数中写什么。
我知道如何将EventLog(或其他组件)添加到服务中。
我知道如何定义服务启动,停止或恢复时会发生什么。
我想知道的是......
我希望我的Windows服务能够执行某些功能(例如索引文件)。
我在哪里添加代码以在服务应用程序中执行此功能?
答案 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();
}
}
}