禁用 "Attach to debugger" Debugger.Launch

Disable "Attach to debugger" Debugger.Launch

我遇到了一个问题,我不小心在我的项目中留下了 "Debugger.Launch();" 代码,这是调试所需要的,因为该应用程序是一个 Windows 服务。

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

服务已打包到 MSI 包中,或多或少可以交付。处理所有包装等的人不在办公室,none 其他人知道该怎么做或有权这样做。

背景故事讲完了..

我一直在搜索这个问题,但是现有的 questions/posts 大部分都是关于 "Prebuild" 解决方案,但我正在寻找 "Postbuild" 解决方案。

[编辑]

解决方案(某种..)

我仍然不知道是否有可能阻止附加,但根据我所做的研究,这似乎是不可能的。因此我不得不重新编译服务。

正如评论中的许多人所建议的那样,我在 app.config 中实现了一个键,并在 "Debugger.Launch()" 周围实现了一个简单的 "if-case",它们工作得很好。现在我可以简单地选择是否附加调试器。

Tamir Vereds 解决方案在我的本地机器上运行,我什至没有在客户服务器上尝试过,因为他还说我的代码基于这种调整。

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

谢谢大家的回答。

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

至于documentation of Debugger.Launch() method

If a debugger is already attached, nothing happens.

您可以通过制作另一个小流程来利用这一事实,该流程将 "debug" 您的原始流程。

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

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

附加了假调试器后,原始进程将 return 执行 Debugger.Launch 方法而不调用另一个调试器。

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

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