如何停止Visual Studio调试器在作业对象中启动我的进程?

180*_*ION 16 debugging visual-studio-2005 visual-studio

当我从Visual Studio启动我的进程时,它总是在作业对象中创建.我想知道如何关闭此行为.有任何想法吗?

我希望它是在要调试的作业对象中创建的.我想将我的程序放在不同的作业对象中.

这不是托管过程.我在谈论一个工作对象.这是一个非托管的C++应用程序.

Tom*_*nka 24

发生这种情况时,devenv.exe或者VSLauncher.exe在兼容模式下运行.该程序兼容性助手(PCA)附加一个作业对象到Visual Studio的过程,每一个孩子进程继承它.检查作业名称(由Process Explorer报告)是否以PCA开头.如果是这样,可以按照链接中的描述禁用PCA.

您可以使用Run- > gpedit.msc- > Administrative Templates\Windows Components\Application Compatibility- > Turn off Program Compatibility Assistant- > 全局禁用PCA Enable.

您可以通过添加注册表项来禁用特定可执行文件的PCA.对于Windows 7,相应的注册表项是HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant.在注册表中,右键单击该键,选择New- > Multi-String Value,为其命名ExecutablesToExclude.将该值设置为的完整路径denenv.exeVSLauncher.exe,在不同的线条和不带引号.对我来说,这些是:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe
C:\Program Files (x86)\Common Files\microsoft shared\MSEnv\VSLauncher.exe
Run Code Online (Sandbox Code Playgroud)

在Windows 7上,一个相关的问题是,您在Visual Studio中构建并从资源管理器(不是Visual Studio或命令行)运行的可执行文件可以在兼容模式下运行,并再次获取包裹它们的作业对象.为了防止这种情况,您的可执行文件需要一个使用新的Application Manifest Compability部分声明与Windows 7兼容的清单.该链接提供了Windows 7兼容清单的示例.Visual Studio 2010提供的默认清单不包括此兼容性部分.


mdb*_*mdb 1

我不知道有什么方法可以控制 VS.NET 生成的用于调试的进程的这方面。但是有一个解决方法,适用于 VS.NET 无法或没有按照您想要的方式启动进程的任何情况:

启动您的进程(可能使用作为构建后事件的一部分运行的包装器 EXE),然后使用“工具/附加到进程”附加到新启动的进程。如果您将调试器作为启动代码的一部分进行侵入,则甚至不需要这样做(并且您还可以调试启动问题...)。