禁用 "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
方法而不调用另一个调试器。
此外,您可能希望您的假调试器稍后以某种方式自行解除附加,以便您仍然可以在需要时真正调试您的应用程序。
请注意,这是一种调整,您不希望将生产代码基于此类内容。
我遇到了一个问题,我不小心在我的项目中留下了 "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
方法而不调用另一个调试器。
此外,您可能希望您的假调试器稍后以某种方式自行解除附加,以便您仍然可以在需要时真正调试您的应用程序。
请注意,这是一种调整,您不希望将生产代码基于此类内容。