Windows服务的基类

时间:2014-07-16 16:59:09

标签: c# service base-class

我正在尝试为Windows服务创建基类。创建时,会自动创建:

     public partial class Service1 : ServiceBase
     {
     public class Base    //added this to become a Base class
     {
        protected override void OnStart(string[] args)//generated code for Service
        {
          //a bunch of code here that I create
         }
     }
     }

我想推出这个课程:

     public class Derived : Base
      {

       void Call(string[] args)
         {
            Call test = new Call();
            test.OnStart(args);///error says no suitable method found to override
         }
      }

我想这样做的原因是因为这个服务将与多种类型的数据库进行交互,我希望尽可能多地重用代码,每个代码都有相同的OnStart,OnStop等......我试过了在派生类中使用virtual,protected,public。我也无法更改生成的代码。

如何调用受保护的覆盖OnStart?我最终也会有私人会员,所以我不必再提出另一个问题,如果我在调用那些有用的东西时需要知道的话......

1 个答案:

答案 0 :(得分:2)

编辑后: 你必须继承ServiceBase。只需在Service1范围内创建公共类,就不会创建继承。正确的定义是:

public class Derived : ServiceBase
{
    protected override void OnStart(string[] args)
    {
        //example
        int x = 1;

        //call the base OnStart with the arguments
        base.OnStart(args);
    }
}

然后,在您的Program类中,您将创建这样的线束来运行它:

var servicesToRun = new[]
{
    new Derived()
};
ServiceBase.Run(servicesToRun);

MSDN参考here

受保护的OnStart方法需要参数string[] args,具体取决于您的上述代码。你需要传递一组参数。