Share via


HOW TO:偵錯 Windows 服務應用程式

因為服務必須從 [服務控制管理員] 內容之中執行,而不是從 Visual Studio 之中執行,因此對服務進行偵錯就不像對其他類型的 Visual Studio 應用程式進行偵錯時那樣簡單直接。 若要對服務進行偵錯,您必須啟動服務,再將偵錯工具附加到正在執行中的處理序中。 之後就可以使用 Visual Studio 所有的標準偵錯功能對應用程式進行偵錯。

警告

除非您知道處理序的內容,也瞭解附加至處理序的後果以及可能會刪除該處理序,否則就不應該附加至處理序。 例如,當您將偵錯工具附加至 WinLogon 處理序並停止偵錯,則系統將會中止,因為系統沒有 WinLogon 就無法操作。

您只可以將偵錯工具附加至正在執行中的服務。 附加處理序會中斷服務目前的運作;它不會實際停止或暫停服務的處理。 也就是說,當您開始偵錯時如果您的服務正在執行中,技術上來說,您偵錯時它還是在啟動狀態,但是它的處理已經暫停。

附加至服務的處理序可讓您對大多數的服務程式碼進行偵錯,但並非所有的服務程式碼都可用這種方式偵錯。例如,由於服務已啟動,因此您無法以這種方式在服務的 OnStart 方法程式碼中偵錯,也無法對用來載入服務的 Main 方法的程式碼偵錯。 解決這個問題的方法是在您的服務應用程式中建立暫時性的第二個服務,這個服務只是用來幫助偵錯。 您可以同時安裝這兩個服務,再啟動這個「空的」服務來載入服務處理序。 一旦暫時性服務啟動了處理序,您就可以在 Visual Studio 中使用 [偵錯] 功能表,將偵錯工具附加到此服務處理序。

附加至處理序之後,您就可以設定中斷點,並使用這些中斷點來偵錯程式碼。 一旦您結束用來附加至處理序的對話方塊,就會立即處於偵錯模式中。 您可以使用 [服務控制管理員] 啟動、停止、暫停與繼續執行服務,以此方式來點擊您所設定的中斷點。 偵錯成功後,您就可以移除這個空的服務。

注意事項注意事項

要對 OnStart 方法偵錯可能會很困難,因為 Windows 服務管理員對所有啟動服務的嘗試都強加上 30 秒的限制。 如需詳細資訊,請參閱疑難排解:對 Windows 服務進行偵錯

若要對服務進行偵錯

  1. 安裝服務。 如需詳細資訊,請參閱 HOW TO:安裝及解除安裝服務

  2. 啟動您的服務,可以從 [服務控制管理員]、[伺服器總管],或程式碼中執行。 如需詳細資訊,請參閱 HOW TO:啟動服務

  3. 在 Visual Studio 中,從 [偵錯] 功能表中選擇 [處理序]。

    [處理序] 對話方塊便會顯示。

  4. 按一下 [顯示系統處理序]。

  5. 在 [可用的處理序] 區段中,按一下服務的處理序,再按一下 [附加]。

    秘訣秘訣

    處理序的名稱和服務的可執行檔名稱相同。

    [附加至處理序] 對話方塊便會顯示。

  6. 選擇任何適當的選項,然後按一下 [確定] 以關閉對話方塊。

    注意事項注意事項

    現在您已處於偵錯模式中。

  7. 在程式碼中設定任何想要使用的中斷點。

  8. 存取 [服務控制管理員] 並管理您的服務,傳送停止、暫停與繼續命令來點擊中斷點。 如需執行 [服務控制管理員] 的詳細資訊,請參閱 HOW TO:啟動服務

請參閱

工作

HOW TO:安裝及解除安裝服務

HOW TO:啟動服務

概念

Windows 服務應用程式簡介