2009-01-26 31 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(); 
    } 
} 
} 
相关问题