禁用“附加到调试器”Debugger.Launch

时间:2016-01-21 07:30:31

标签: c# .net debugging windows-services

我遇到了问题,我不小心离开了“Debugger.Launch();”我的项目中的代码,由于应用程序是Windows服务,因此需要进行调试。

现在,我完成了项目,它按预期工作(主要是)但是,每次启动服务时,都会询问您是否要附加调试器。

该服务已经打包到MSI包中,或多或少已准备好交付。处理所有包装的人不在办公室,没有其他人知道如何做或有权这样做。

足够的背景故事..

  • 我可以以任何方式禁用调试器代码而无需重新打包 服务? - 或者我必须重新包装?
  • 是否有任何启动命令或其他东西阻止它要求 调试器?

我一直在搜索这个问题,但关于此问题的大多数现有问题/帖子都是关于“预建”的解决方案,但我正在寻找一种“Postbuild”解决方案。

[编辑]

解决方案(某种......)

我仍然不知道是否有可能阻止附着,但是通过我已经完成的研究,似乎是不可能的。因此我不得不重新编译服务。

许多评论建议我在app.config中实现了一个键,并在“Debugger.Launch()”周围实现了一个简单的“if-case”,它完美地运行。现在我可以选择是否附加调试器。

Tamir Vereds解决方案在我的本地计算机上运行,​​我甚至没有尝试过客户服务器,因为他之所以说明我的代码是基于这种调整。

我会接受这个答案,因为它可以解决最初的问题。

谢谢大家的回答。

1 个答案:

答案 0 :(得分:5)

通常我会建议重新编译应用程序并允许使用参数或配置取消Debugger.Launch调用来调用它,但是因为你不想重新编译...

至于documentation of Debugger.Launch() method

  

如果已连接调试器,则不会发生任何事情。

您可以通过制作另一个小型流程来充分利用这一事实,这个流程将会调整"你原来的过程。

由于您的流程是Windows服务,您可能需要使用 Auto-Debugger-Attach

  • regedit
  • 中键入cmd,打开注册表编辑器
  • 导航至:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
  • 使用已调试的应用程序.exe的名称添加密钥。
  • 当值为新的"调试程序进程"时,将名称为Debugger的字符串值添加到该键。路径。

附加假的调试器后,原始进程将返回Debugger.Launch方法,而不调用另一个调试器。

此外,您可能希望您的假调试器稍后以某种方式自行解析,以便您在需要时仍可以真正调试应用程序。

请注意,这是一种调整,您不希望将生产代码基于此类内容。