ServiceBase.Run未执行后,控制台应用程序代码中的C#windows服务?

时间:2014-11-16 08:42:25

标签: c# windows-services

我使用控制台应用程序实现了Windows服务,如下所示:

  internal class Program
{
    private static void Main(string[] args)
    {

            ServiceBase.Run(new MyServicesInitializer()); //host the services in managed windows service

         //some more code
         string x=1;
         .....

    }



 public class MyServicesInitializer : ServiceBase
 {
       protected override void OnStart(string[] args)
       {
               //my code
       }
 }

我的问题是:当我用sc.exe启动服务时,是否会调用main方法?似乎没有...如果有人能够解释当我使用sc启动服务时发生的事情,为什么我需要这一行: ServiceBase.Run(new MyServicesInitializer()); in我的主要?

编辑:我做了实验并在main中的行之前和之后抛出异常:当我抛出异常之前抛出异常但是当我在run方法之后放置异常时它没有被抛出并且服务启动成功...有人可以解释为什么Run方法之后的代码没有被执行?

1 个答案:

答案 0 :(得分:3)

我设法弄清楚发生了什么,这是流程: 当调用函数 ServiceBase.Run(new MyServicesInitializer()); 时,代码不会从此函数返回,直到服务停止,因此其后的代码将仅运行服务停止后!