Как остановить отладчик Visual Studio, начиная мой процесс, в объекте задания?

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

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

Это не хостинг-процесс. Я говорю о Объекте задания. Это неуправляемое приложение на С++.

Ответы

Ответ 1

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

Вы можете глобально отключить PCA, используя Rungpedit.mscAdministrative Templates\Windows Components\Application CompatibilityTurn off Program Compatibility AssistantEnable.

Вы можете отключить PCA для конкретных исполняемых файлов, добавив запись в реестр. Для Windows 7 соответствующий раздел реестра HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant. В regedit щелкните правой кнопкой мыши этот ключ, выберите NewMulti-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 и запускаете из Explorer (не Visual Studio или командной строки), могут выполняться в режиме совместимости и снова обертывать вокруг них объекты работы. Чтобы этого избежать, вашему исполняемому файлу нужен манифест, который заявляет о совместимости с Windows 7, используя новый раздел "Явление манифеста приложений" . Ссылка дает пример совместимого с Windows 7 манифеста. Ярлык по умолчанию, предоставленный Visual Studio 2010, не включает этот раздел совместимости.

Ответ 2

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

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

Ответ 3

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

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