我使用控制台应用程序实现了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方法之后的代码没有被执行?
答案 0 :(得分:3)
我设法弄清楚发生了什么,这是流程: 当调用函数 ServiceBase.Run(new MyServicesInitializer()); 时,代码不会从此函数返回,直到服务停止,因此其后的代码将仅运行服务停止后!