是否可以在不使用可啓動應用程序中的代碼的情況下調試Windows服務或類庫?有一個關於這樣做的線程,但是這些技術不起作用,並且因爲我正在使用Windows服務而一直說「無法啓動服務...」。調試Windows服務而不消耗另一個應用程序的代碼
謝謝
是否可以在不使用可啓動應用程序中的代碼的情況下調試Windows服務或類庫?有一個關於這樣做的線程,但是這些技術不起作用,並且因爲我正在使用Windows服務而一直說「無法啓動服務...」。調試Windows服務而不消耗另一個應用程序的代碼
謝謝
在你的主函數中,不是調用ServiceBase.Run(servicesToRun)
,而是運行你想測試的實際代碼。
我通常把代碼檢查命令行參數爲:
-c run in console mode
-i install the service
-u uninstall the service
none run the service
然後設置VS在-c同時發送調試模式。
這裏有一些代碼可以用來附加調試器。過去在開始的過程中,我發現很難附加一個調試器。當我在CodeProject上發現這個奇妙的剪輯時,我相信。
無論如何,將此添加到OnStart中,構建,安裝並啓動您的服務。一旦你開始,它會看起來像掛了。附加到服務過程中(確保你有正確連接到所選代碼庫和魄力,你甚至可以調試啓動。
protected override void OnStart(string[] args)
{
#if DEBUG
while (!Debugger.IsAttached) // Waiting until debugger is attached
{
RequestAdditionalTime(1000); // Prevents the service from timeout
Thread.Sleep(1000); // Gives you time to attach the debugger
}
RequestAdditionalTime(20000); // for Debugging the OnStart method,
// increase as needed to prevent timeouts
#endif
// here is your startup code with breakpoints
}
HTH
這種類型的東西恰恰是什麼TopShelf爲你自動化:-) – 2010-06-03 09:01:49
可能,但它也是3個額外的dll,沒有任何易於訪問的文檔以及許可證的常見擔心以及它的寫入方式。如果我需要所有額外的功能,我確定它包含(雖然我不確定它們是什麼,因爲描述是相當基本的),我可能會感興趣。 – 2010-06-03 09:26:27