Как остановить отладчик Visual Studio, запускающий мой процесс в объекте задания? - PullRequest
15 голосов
/ 18 сентября 2008

Когда я запускаю свой процесс из Visual Studio, он всегда создается внутри объекта задания. Я хотел бы знать, как отключить это поведение. Есть идеи?

Я ожидаю, что он создан в объекте задания для отладки. Я хочу разместить свою программу в другом объекте работы.

Это не процесс хостинга. Я говорю о Job Object . Это неуправляемое приложение C ++.

Ответы [ 3 ]

23 голосов
/ 20 ноября 2010

Это происходит, когда devenv.exe или VSLauncher.exe работают в режиме совместимости. Помощник по совместимости программ (PCA) присоединяет объект задания к процессу Visual Studio, и каждый дочерний процесс наследует его. Проверьте, начинается ли имя задания (как сообщает Process Explorer) с PCA . В этом случае PCA можно отключить, как описано в ссылке.

Вы можете глобально отключить PCA, используя Run -> gpedit.msc -> Administrative Templates\Windows Components\Application Compatibility -> Turn off Program Compatibility Assistant -> Enable.

Вы можете отключить PCA для определенных исполняемых файлов, добавив запись в реестр. Для Windows 7 соответствующий раздел реестра - HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant. В regedit щелкните правой кнопкой мыши этот ключ, выберите New -> Multi-String Value, назовите его ExecutablesToExclude. Установите значение полного пути denenv.exe и VSLauncher.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

Связанная проблема в Windows 7 заключается в том, что исполняемые файлы, которые вы создаете в Visual Studio и запускаете из Проводника (не Visual Studio или командной строки), могут работать в режиме совместимости и снова оборачиваться объектами заданий. Чтобы предотвратить это, вашему исполняемому файлу нужен манифест, который объявляет совместимость с Windows 7, используя новый раздел совместимости манифеста приложения . Ссылка дает пример совместимого с Windows 7 манифеста. Манифест по умолчанию, предоставляемый Visual Studio 2010, не включает этот раздел совместимости.

1 голос
/ 18 сентября 2008

Я не могу воспроизвести то, что вы видите. Я создал неуправляемое приложение C ++ в VS 2005 и VS 2008, и у меня нет проблем с привязкой этого процесса к новому объекту задания при запуске процесса в VS.

Вы уверены, что отладчик делает это?

1 голос
/ 18 сентября 2008

Мне неизвестны какие-либо способы управления этим аспектом процессов, порожденных для отладки VS.NET. Но есть обходной путь, который применим в любой ситуации, когда VS.NET не может или не запускает ваш процесс именно так, как вам нужно:

Запустите ваш процесс (возможно, с использованием EXE-файла-обертки, который выполняется как часть события после сборки), затем присоедините его к недавно запущенному процессу с помощью Tools / Attach to Process. Если вы вломились в отладчик как часть своего кода запуска, это даже не потребуется (и вы также можете отлаживать проблемы запуска ...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...