禁用"附加到调试器"Debugger.Launch

Laa*_*anz 0 .net c# debugging windows-services

我遇到了问题,我不小心离开了"Debugger.Launch();" 我的项目中的代码,由于应用程序是Windows服务,因此需要进行调试.

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

该服务已经包装到MSI包中,或多或少已准备好交付.处理所有包装的人不在办公室,没有其他人知道如何做或有权这样做.

足够的背景故事......

  • 我可以以任何方式禁用调试器代码而无需重新打包服务吗? - 或者我必须重新包装?
  • 是否有任何启动命令或其他东西阻止它要求调试器?

我一直在搜索这个问题,但关于这个问题的大多数现有问题/帖子都是关于"预建"解决方案,但我正在寻找一个"Postbuild"解决方案.

[编辑]

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

我仍然不知道是否有可能阻止附着,但是通过我已经完成的研究,似乎是不可能的.因此我不得不重新编译服务.

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

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

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

谢谢大家回答.

Tam*_*red 5

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

至于方法文件Debugger.Launch():

如果已连接调试器,则不会发生任何事情.

您可以通过制作另一个"调试"原始流程的小流程来利用这一事实.

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

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

附加假的调试器后,原始进程将返回该Debugger.Launch方法而不调用另一个调试器.

此外,您可能希望您的假调试器稍后以某种方式自行解析,这样您仍然可以在需要时真正调试应用程序.

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