2016-01-21 107 views
0

我遇到了問題,我不小心遺留了「Debugger.Launch();」代碼在我的項目中,這是調試所需的,因爲應用程序是Windows服務。禁用「附加到調試器」Debugger.Launch

現在,我完成了項目,它按預期工作(大部分)但是,每次啓動服務時,它都會詢問您是否要連接調試器。

該服務已打包到MSI軟件包,並且或多或少已準備好交付。處理所有包裝等的人不在辦公室,沒有人知道如何做或有權這樣做。

足以與背景故事..

  • 我可以在任何方式,而不重新包裝 服務禁用調試代碼? - 或者我必須重新包裝?
  • 是否有任何啓動命令或什麼東西來阻止它要求調試器 ?

我一直在尋找很多關於這方面的知識,但是大部分關於這方面的問題/帖子都是關於「預建」解決方案的,但是我正在尋找一個「Postbuild」解決方案。

[編輯]

解決方案(有些種類的..)

我仍然不知道,如果它甚至可以防止安裝,但與研究,我已經做了,這似乎是不可能的。因此我必須重新編譯服務。

許多人認爲我提出的建議是我在app.config中實現了一個關鍵字,以及圍繞「Debugger.Launch()」的一個簡單的「if-case」,它完美地工作。現在我可以簡單地選擇是否附加調試器。

塔米爾Vereds解決方案工作我的本地機器上,而我甚至沒有嘗試在客戶服務器上,因爲他之所以還指出有關基礎上,這種調整我的代碼。

我會接受這個答案,因爲它可以部分解決最初的問題。

謝謝大家的回答。

+0

你應該修改你的應用程序以允許通過'app.config AppSettings'控制調試功能 – 2016-01-21 07:33:24

+0

@Kilanny你在說什麼? OP正試圖阻止重建他們的項目。 – CodeCaster

+0

@CodeCaster這就是我的意思。 OP必須只修改一次他的代碼,建立一次,然後OP可以通過'app.config'控制功能。 – 2016-01-21 07:39:47

回答

5

通常我會建議重新編譯應用程序,並允許它有一個參數或配置取消Debugger.Launch呼叫被調用,但是既然你不想重新編譯......

對於documentation of Debugger.Launch() method

如果調試器已連接,則不會發生任何事情。

你可以利用這個事實,通過另一個小的進程來「調試」你的原始進程。通過在cmd鍵入regedit

  • 打開註冊表編輯器:

    由於您的過程,你可能需要使用Windows服務自動調試器附加

  • Navigate to:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
  • 爲調試應用程序的名稱添加一個密鑰.exe的名稱。
  • 當值爲新的「調試器進程」路徑時,將名稱爲Debugger的字符串值添加到該密鑰。

如果連接了假調試器,原始進程將返回frm Debugger.Launch方法而不調用另一個調試器。

此外,您可能希望假調試器稍後以某種方式自行脫離,以便在需要時仍可真正調試您的應用程序。

請注意,這是一種調整,你不想將你的生產代碼基於這種東西。

+1

嗯,沒有人知道如何編寫調試器在辦公室。 –

+1

你並不需要你的假調試器才能正常工作,只需要將它作爲一個附件來調試,這樣'Debugger.Launch'就可以看到它。無論如何,正如我所說,我會建議只重新編譯所需更改的代碼。 –