使用预处理器指令 #if 在Visual Studio中调试WindowsService

本文关键字:Studio Visual 调试 WindowsService #if 预处理 处理器 指令 | 更新日期: 2023-09-27 18:32:07

当我使用VS2010 SP1时,我编写了一个Windows服务。现在我想在不安装的情况下调试它。所以我在程序.cs主方法中编写代码如下:

#if (DEBUG)
            ControllerNTService service =new ControllerNTService();
            Console.ReadLine();
#else
            System.ServiceProcess.ServiceBase[] ServicesToRun;
            ServicesToRun = new System.ServiceProcess.ServiceBase[] { new ControllerNTService() };
            System.ServiceProcess.ServiceBase.Run(ServicesToRun);
#endif

我希望在VS 2010中调试Windows服务。但在 VS 中,下面的代码行显示为灰色。这意味着格雷码无效,对吗?(两行为灰色)

ControllerNTService service =new ControllerNTService(); Console.ReadLine();

如果代码有效,我想我可能会遇到它们。

另一个问题,使用上面的代码,当我按F5调试它时,它表明它无法调试它,我需要先安装服务。

我希望有人遇到类似的问题来指导我。有好的一天

使用预处理器指令 #if 在Visual Studio中调试WindowsService

您应该检查项目的活动生成配置。它需要设置为"调试"。(我认为它被你描述的设置为"发布")

您可以使用菜单构建 -> 配置管理器...-> 在对话框中将活动解决方案配置设置为"调试"来更改活动生成配置。

如果要从命令行启动服务,还需要启动它。因此,您应该向控制器NTS服务添加一个启动方法,该方法调用实例上受保护的OnStart方法

public class ControllerNTService{
   // additional service code
   internal void Start(string[] args) {
     base.OnStart(args);
   }
   internal void Stop() {
     base.OnStop();
   }
}

在 main 方法中,您应该在服务实例上调用 Start。

ControllerNTService service =new ControllerNTService();
service.Start(args);
Console.ReadLine();
service.Stop();

除了启动之外,最好提供一种方法来停止服务(该方法调用 Procted 方法 OnStop)。此方法在 Console.ReadLine 之后调用以停止服务。