检查是否从Visual Studio中启动了应用程序

时间:2020-03-06 14:25:55  来源:igfitidea点击:

我正在安装系统范围键盘的应用程序上
钩。运行调试时,我不想安装此挂钩
从视觉工作室内部进行构建(否则将使工作室挂起
最终是系统),我可以通过检查
定义了调试符号。

但是,当我调试应用程序的发行版时,是
有一种方法可以从视觉内部检测到它已经开始
工作室避免同样的问题?必须要做的是非常烦人的
重新启动演播室/计算机,因为我一直在
发布版本,并希望使用具有以下功能的调试器来修复一些错误:
忘记切换回调试版本。

目前,我使用类似这样的方法来检查这种情况:

System.Diagnostics.Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
string moduleName = currentProcess.MainModule.ModuleName;
bool launchedFromStudio = moduleName.Contains(".vshost");

我将其称为"暴力方式",它在我的环境中有效,但是我想知道是否存在另一种(更好的)检测这种情况的方式。

解决方案

试试:System.Diagnostics.Debugger.IsAttached

我强烈建议不要使用仅在调试时运行的代码。为什么?我们想确保投入生产的就是我们在本地测试/看到的东西。特别是我们使用的低级语言,因为代码差异经常导致编译器以不同的方式生成机器/ IL。

也许出于发现问题的目的,但是仅此而已。

对于使用Windows API的用户,有一个函数可让我们使用以下命令查看是否存在任何调试器:

if( IsDebuggerPresent() )
{
    ...
}

参考:http://msdn.microsoft.com/en-us/library/ms680345.aspx