2012-04-25 121 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