我遇到了问题,我不小心离开了“Debugger.Launch();”我的项目中的代码,由于应用程序是Windows服务,因此需要进行调试。
现在,我完成了项目,它按预期工作(主要是)但是,每次启动服务时,都会询问您是否要附加调试器。
该服务已经打包到MSI包中,或多或少已准备好交付。处理所有包装的人不在办公室,没有其他人知道如何做或有权这样做。
足够的背景故事..
我一直在搜索这个问题,但关于此问题的大多数现有问题/帖子都是关于“预建”的解决方案,但我正在寻找一种“Postbuild”解决方案。
[编辑]
解决方案(某种......)
我仍然不知道是否有可能阻止附着,但是通过我已经完成的研究,似乎是不可能的。因此我不得不重新编译服务。
许多评论建议我在app.config中实现了一个键,并在“Debugger.Launch()”周围实现了一个简单的“if-case”,它完美地运行。现在我可以选择是否附加调试器。
Tamir Vereds解决方案在我的本地计算机上运行,我甚至没有尝试过客户服务器,因为他之所以说明我的代码是基于这种调整。
我会接受这个答案,因为它可以解决最初的问题。
谢谢大家的回答。
答案 0 :(得分:5)
通常我会建议重新编译应用程序并允许使用参数或配置取消Debugger.Launch
调用来调用它,但是因为你不想重新编译...
至于documentation of Debugger.Launch()
method:
如果已连接调试器,则不会发生任何事情。
您可以通过制作另一个小型流程来充分利用这一事实,这个流程将会调整"你原来的过程。
由于您的流程是Windows服务,您可能需要使用 Auto-Debugger-Attach :
regedit
。cmd
,打开注册表编辑器
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
。.exe
的名称添加密钥。Debugger
的字符串值添加到该键。路径。附加假的调试器后,原始进程将返回Debugger.Launch
方法,而不调用另一个调试器。
此外,您可能希望您的假调试器稍后以某种方式自行解析,以便您在需要时仍可以真正调试应用程序。
请注意,这是一种调整,您不希望将生产代码基于此类内容。