2

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

我希望有人遇到类似的问题来指导我。祝你今天过得愉快

4

1 回答 1

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();
   }
}

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

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

除了启动之外,提供一个停止服务的方法(调用 procted 方法 OnStop)也是一个好主意。此方法在 Console.ReadLine 之后调用以停止服务。

于 2012-04-25T07:51:48.773 回答