2011-08-10 28 views
0

我目前正在爲客戶端開發c#.net服務。過去我在調試.net服務時遇到了問題,所以我添加了Debug.Launch();代碼的一部分,以便我的IDE將在啓動時啓動,如Easier way to debug a Windows service所示。所有這些都很好。啓動時的C#服務始終使用調試器

但是後來發佈的時候,我關掉了調試...而且它仍然做到了!世界衛生大會?因此,作爲解決方案,我剔除了所有調試啓動代碼....並且仍然要求加載調試器。我嘗試使用發佈模式進行安裝,但它仍然會這樣做。我只需點擊「否」繼續...但這對於客戶來說是不可接受的。

關於我可能會丟失什麼的建議?

+6

您知道默認情況下,Visual Studio會將發佈版本構建到不同的文件夾中嗎?您是否在Windows中重新註冊了服務,以便它現在查看發佈位置(\ bin \ Release \)? – Dmitry

+0

檢查你的GAC –

+0

如果你已經從代碼中刪除它,你真的不應該得到附加問題,我懷疑你的原始版本正在運行。檢查你的GAC並確保你的庫沒有安裝在它中,因爲它比本地dll更先進。 –

回答

2

當VS調試器連接到進程時,您將看到堆棧跟蹤。這會幫助你找到原因。如果此調用觸發調試器啓動,它將停止在Debugger.Launch()調用。正如我在評論中所說的,您可能需要在Windows中重新註冊您的服務,因爲VS在bin/Release中構建發行版本,而不是在最初註冊它的bin/Debug中。

+0

對不起,我應該指定。它不能成爲GAC問題,因爲我在客戶機器上使用發佈模式下的自定義安裝程序。因此,當我發生這種情況時,我所做的'跆拳道'的臉。我不確定這裏發生了什麼事。我試着調試它......它在程序開始時是正確的,所以它不是一個錯誤。我不清楚問題是什麼。 我會繼續檢查,當我弄明白時,我會發布解決方案。 –

+0

這可能是因爲您的崩潰與您使用的Debugger.Launch代碼無關。這可能就像缺少的DLL和Windows只提示附加調試器,因爲顯然你已經安裝在客戶機器上。 – Dmitry

+0

事實證明,另一位開發人員將Debugger.Launch()放在另一個位置的代碼中。我對此一無所知,並做出了愚蠢的假設(我們都知道有關假設),認爲它不在那裏。 在很多擺弄過程中它被深埋在代碼中,所以我錯過了它。 感謝您的幫助。 故事的寓意:在做任何事情之前搜索Debugger.Launch()。 –

相關問題