【问题标题】:C# windows service within console application code after ServiceBase.Run not executed?未执行 ServiceBase.Run 后控制台应用程序代码中的 C# Windows 服务?
【发布时间】:2014-11-16 08:42:24
【问题描述】:

我在控制台应用程序中实现了 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方法后面的代码没有执行?

【问题讨论】:

    标签: c# windows-services


    【解决方案1】:

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

    【讨论】:

    • 我也不会指望它,因为它是无证行为。更安全地假设您在主函数中唯一可以做的就是调用ServiceBase.Run
    • 但是我实现了两种模式:用于开发的控制台模式和用于生产的 Windows 服务模式……但重要的是要知道,当服务在执行后停止代码时……在我的在 ServiceBase.Run 函数之后的 case 我添加了 return 语句。
    猜你喜欢
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多