如何:調試 Windows 服務應用程序

由於服務必須從服務控制管理器的上下文中運行,而不是從 Visual Studio 中運行,因此調試服務不像調試其他 Visual Studio 應用程序類型那樣簡單。若要調試服務,必須首先啓動服務,然後將一個調試器附加到正在運行服務的進程中。然後可以使用 Visual Studio 的所有標準調試功能來調試應用程序。

Caution note警告

除非知道進程是什麼,並且知道附加到進程或可能取消進程所帶來的後果,否則不要附加到進程。例如,如果附加到 WinLogon 進程,然後停止調試,系統就會暫停,因爲沒有 WinLogon,系統無法運行。

只能將調試器附加到正在運行的服務。附加進程會中斷服務的當前運行;它並不真正終止或暫停服務的處理。也就是說,如果開始調試時服務正在運行,則在進行調試時,該服務從技術上說仍處於“已啓動”狀態,但它的處理已掛起。

附加到服務的進程使您能夠調試大多數服務代碼,但並非全部;例如,由於服務已經啓動,因此不能用這種方法調試服務的 OnStart 方法中的代碼,或調試用於加載服務的 Main 方法中的代碼。解決此問題的一個方法是:在唯一作用是幫助調試的服務應用程序中創建一個臨時服務。可以將兩個服務都安裝上,然後啓動此“虛擬”服務加載服務進程。臨時服務啓動了進程後,就可以使用 Visual Studio 中的“調試”菜單來附加到服務進程。

當附加該進程之後,可以設置斷點並使用這些斷點來調試代碼。當退出用於附加到該進程的對話框時,實際上已處於調試模式。您可以使用“服務控制管理器”開始、停止、暫停和繼續您的服務,因此命中已設置的斷點。調試成功後,移除此“虛擬”服務。

Note注意

調試 OnStart 方法可能比較困難,因爲 Windows 服務管理器將所有嘗試啓動服務的時間限制在 30 秒內。有關更多信息,請參見疑難解答:調試 Windows 服務

調試服務

  1. 安裝您的服務。有關更多信息,請參見如何:安裝和卸載服務

  2. 可從“服務控制管理器”、“服務器資源管理器”或代碼啓動服務。有關更多信息,請參見如何:啓動服務

  3. 在 Visual Studio 中,從“調試”菜單中選擇“進程”。

    即會出現“進程”對話框。

  4. 單擊“顯示系統進程”。

  5. 在“可用進程”區域內單擊服務的進程,然後單擊“附加”。

    Note提示

    該進程將與服務的可執行文件同名。

    出現“附加到進程”對話框。

  6. 選擇任意適當的選項,然後單擊“確定”關閉對話框。

    Note注意

    現在您處於調試模式。

  7. 設置要在代碼中使用的任意斷點。

  8. 訪問“服務控制管理器”並操縱您的服務,併發送停止、暫停和繼續命令以命中您的斷點。有關運行“服務控制管理器”的更多信息,請參見如何:啓動服務

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章