禁用“附加到调试器”调试器
本文关键字:调试器 禁用 | 更新日期: 2023-09-27 18:31:12
我遇到了一个问题,我不小心在我的项目中留下了"Debugger.Launch();"代码,这是调试所必需的,因为应用程序是Windows服务。
现在,我已经完成了项目,它按预期工作(大部分),但是,每次启动服务时,它都会询问您是否要附加调试器。
该服务已打包为MSI包,并或多或少已准备好交付。处理所有包装等的人不在办公室,也没有其他人知道如何做或有权做。
背景故事就够了..
- 我可以以任何方式禁用调试器代码而不重新打包服务?- 还是我必须重新包装?
- 是否有任何启动命令或其他东西可以阻止它要求调试器?
但是关于这个的大多数现有问题/帖子都涉及"预构建"解决方案,但我正在寻找"后期构建"解决方案。
[编辑]
解决方案(某种..)
我仍然不知道是否有可能防止附着,但根据我所做的研究,这似乎是不可能的。因此,我不得不重新编译服务。
正如许多评论者建议我在app.config中实现了一个键,并在"Debugger.Launch()"周围实现了一个简单的"if-case",它完美地工作。现在我可以简单地选择是否附加调试器。
Tamir Vereds 解决方案在我的本地机器上运行,我什至没有在客户服务器上尝试,因为他也表示我的代码基于这种调整。
我会接受这个答案,因为它可以部分解决最初的问题。
谢谢大家的回答。
通常我建议重新编译应用程序并允许使用取消Debugger.Launch
调用的参数或配置来调用它,但由于您不想重新编译......
至于Debugger.Launch()
方法的文档:
如果已附加调试器,则不会执行任何操作。
您可以通过创建另一个小进程来"调试"原始进程来利用这一事实。
由于您的进程是 Windows 服务,因此可能需要使用自动调试器附加:
- 通过在
cmd
中键入regedit
来打开注册表编辑器。 - 导航到:
HKEY_LOCAL_MACHINE'SOFTWARE'Microsoft'Windows NT'CurrentVersion'Image File Execution Options
。 - 使用调试的应用程序的
.exe
名称添加一个密钥。 - 当该值是新的"调试器进程"路径时,将字符串值添加到该键,名称为
Debugger
。
附加假调试器后,原始进程将返回 frm Debugger.Launch
方法,而无需调用另一个调试器。
此外,您可能希望您的假调试器稍后以某种方式自行断开连接,以便您仍然可以在需要时真正调试您的应用程序。
请注意,这是一种调整,您不希望将生产代码基于这种东西。