禁用"Attach to debugger"调试器。启动



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

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

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

背景故事就够了..

  • 我可以以任何方式禁用调试器代码而不重新打包服务?- 还是我必须重新包装?
  • 是否有任何启动命令或其他东西可以阻止它要求调试器?
我一直在搜索很多关于这个,

但是关于这个的大多数现有问题/帖子都涉及"预构建"解决方案,但我正在寻找"后期构建"解决方案。

[编辑]

解决方案(某种..)

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

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

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

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

谢谢大家的回答。

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

至于Debugger.Launch()方法的文档:

如果已附加调试器,则不会执行任何操作。

您可以通过创建另一个小进程来"调试"原始进程来利用这一事实。

由于您的进程是 Windows 服务,因此可能需要使用自动调试器附加

  • 通过在cmd中键入 regedit 来打开注册表编辑器。
  • 导航到:HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options
  • 使用调试的应用程序的.exe 名称添加一个密钥。
  • 当该值是新的"调试器进程"路径时,将字符串值添加到该键,名称为 Debugger

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

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

请注意,这是一种调整,您不希望将生产代码基于这种东西。

最新更新