2012-04-25 102 views
2

当我使用VS2010 SP1时,我编写了一个windows服务。现在我想调试它而不安装它。所以我写的代码如下Program.cs的主要方法:使用预处理器指令在Visual Studio中调试WindowsService #if

#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 

我预计在2010年VS不过VS调试Windows服务,代码行下面显示灰色。这意味着灰色代码无效,对吗? (两条线是灰色的)

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

如果代码是有效的,我想我能碰上他们。

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

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

回答

1

您应该检查项目的活动生成配置。它需要设置为“调试”。 (我认为它通过你所描述的设置为“RELEASE”)

你可以使用菜单构建 - > ConfigurationManager ...->在活动解决方案配置中设置为“DEBUG”来更改活动构建配置。

如果你想从命令行启动你的服务,你还需要启动它。因此,你应该添加一个Start方法你ControllerNTService调用的实例

public class ControllerNTService{ 
    // additional service code 

    internal void Start(string[] args) { 
    base.OnStart(args); 
    } 

    internal void Stop() { 
    base.OnStop(); 
    } 
} 

保护OnStart方法在你的主要方法,那么你应该呼吁服务实例启动。

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

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

+0

非常感谢您的回复。其实,我把我的项目定义为“调试”模式。现在,我遇到了两个问题。第一个是VS禁止我调试。当我按F5进行调试时,VS显示一个对话框“无法从命令行或调试器启动服务”。必须首先安装Windows服务(使用installutil.exe)......“。第二个是我在#if #else中的代码显示为灰色。这意味着代码无效。 – 2012-04-25 08:51:13