【问题标题】:Disable "Attach to debugger" Debugger.Launch禁用“附加到调试器”Debugger.Launch
【发布时间】:2016-01-21 07:30:30
【问题描述】:

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

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

服务已打包到一个 MSI 包中,并且或多或少可以交付。处理所有包装等的人不在办公室,没有其他人知道如何做或有权这样做。

背景故事说得够多了。

  • 我能以任何方式禁用调试器代码而不重新打包 服务? - 还是我必须重新包装?
  • 是否有任何启动命令或阻止它请求的东西 调试器?

我一直在搜索这方面的内容,但现有的大部分问题/帖子都与“预构建”解决方案有关,但我正在寻找“后构建”解决方案。

[编辑]

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

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

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

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

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

谢谢大家的回答。

【问题讨论】:

  • 你应该修改你的应用程序以允许通过app.config AppSettings控制调试功能
  • @Kilanny 你在说什么? OP 正试图避免重建他们的项目。
  • @CodeCaster 这就是我的意思。 OP只需要修改他的代码一次,构建一次,然后OP就可以通过app.config来控制特性
  • @Kilanny 尝试再次阅读问题。 OP 无法修改他们的代码。
  • 我认为不可能阻止一些已经编译成二进制的代码运行(除非通过修补二进制使用一些逆向工程)

标签: c# .net debugging windows-services


【解决方案1】:

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

至于documentation of Debugger.Launch() method

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

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

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

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

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

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

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

【讨论】:

  • 嗯,办公室里没人知道如何编写调试器。
  • 你并不需要你的假调试器能够正常工作,只需附加为一个,这样Debugger.Launch 就会看到它。无论如何,正如我所说,我建议只重新编译代码并进行所需的更改。
猜你喜欢
  • 2022-09-25
  • 2017-09-13
  • 1970-01-01
  • 2010-11-26
  • 2010-12-15
  • 2021-01-03
  • 2018-09-05
  • 2011-05-17
相关资源
最近更新 更多