我知道如何“创建”一个服务应用程序。在.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