2014-11-16 53 views
1

我在控制台应用程序中实现窗口服务,如下:ServiceBase.Run未执行后,控制台应用程序代码中的C#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服务做的主要方法是叫什么名字?它似乎不是......如果有人可以解释流量当我开始服务与sc时发生了什么,为什么我需要该行:ServiceBase.Run(new MyServicesInitializer());在我的主要?

编辑:我做了实验,并在主要行的前后抛出异常:当我抛出异常之前抛出的异常当我把异常后,运行方法不抛出,服务开始成功...有人可以解释为什么Run方法之后的代码没有执行?

回答

2

我设法弄清楚发生了什么,这里是流程: 当函数ServiceBase.Run(new MyServicesInitializer());被称为代码没有从这个函数返回,直到服务是停止因此它后的代码将只在服务停止后运行!

+0

我不会指望这一点,因为它是无证的行为。更安全地假设你可以在main函数中做的唯一事情就是调用'ServiceBase.Run'。 –

+0

但我实现了两种模式:用于开发的控制台模式和用于生产的Windows服务模式......但重要的是要知道,当服务在执行后停止代码...在我的情况下,函数ServiceBase.Run我添加了return语句。 –

相关问题