【问题标题】:Debug WindowsService in Visual Studio using preprocessor directive #if使用预处理器指令 #if 在 Visual Studio 中调试 WindowsService
【发布时间】:2012-04-25 07:37:31
【问题描述】:

当我使用VS2010 SP1时,我编写了一个windows服务。现在我想调试它而不安装它。所以我在 Program.cs 的 main 方法中编写代码如下:

#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调试它时,它显示它无法调试它,我需要先安装服务。

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

【问题讨论】:

    标签: c# visual-studio-2010 debugging windows-services


    【解决方案1】:

    您应该检查项目的活动构建配置。它需要设置为“调试”。 (我认为根据您的描述将其设置为“RELEASE”)

    您可以使用 Menu Build -> ConfigurationManager...-> 在对话框中将 Active Solution Configuratio 设置为“DEBUG”来更改活动的构建配置。

    如果您想从命令行启动服务,您还需要启动它。因此,您应该向 ControllerNTService 添加一个 Start 方法,该方法在实例上调用受保护的 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 之后调用该方法停止服务。

    【讨论】:

    • 非常感谢您的回复。实际上,我已将我的项目配置为“调试”模型。现在,我遇到了两个问题。第一个是 VS 禁止我调试。当我按 F5 进行调试时,VS 显示一个对话框说“无法从命令行或调试器启动服务。必须首先安装 Windows 服务(使用installutil.exe)...."。第二个是我在#if #else 中的代码显示为灰色。这意味着代码无效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 2011-10-27
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    相关资源
    最近更新 更多