Visual Studio 2010 автоматизации и переменные среды - PullRequest
6 голосов
/ 15 сентября 2011

Я открываю решения VS2010 с использованием автоматизации C # и VS2010. Я открываю такие решения:

Type type = Type.GetTypeFromProgID("VisualStudio.DTE.10.0", true);
Object comObject = Activator.CreateInstance(type);
...
sol.Open(solution_full_path);

Проблема, с которой я сталкиваюсь, заключается в том, что когда я создаю экземпляр объекта VisualStudio.DTE.10.0, он запускает процесс devenv.exe с winlogon.exe, который видит совершенно другую среду, чем мое приложение. Некоторые переменные среды важны для разрешения некоторых путей, установленных в проектах.

Есть ли какое-либо влияние на переменные окружения процесса devenv.exe? Есть ли способ, как я мог бы внедрить среду / свойства, используя интерфейсы автоматизации VS2010?

Ответы [ 2 ]

2 голосов
/ 27 ноября 2011

Можно ли запустить devenv самостоятельно в своей среде? Затем попробуйте запустить Visual Studio Instance через таблицу запущенных объектов (ROT).

// Get an instance of the currently running Visual Studio IDE.
EnvDTE80.DTE2 dte2;
dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
GetActiveObject("VisualStudio.DTE.10.0");

Вы получите проблемы, если у вас будет более одного работающего экземпляра VS, но это также легко. Вы можете получить в руки конкретный экземпляр VS , где вам нужно знать только идентификатор процесса вашего самостоятельно запущенного экземпляра VS.

Visual Studio также регистрирует ProgID как псевдоним элемента в ROT. ProgID состоит из имени и идентификатора процесса DTE. Так, например, запись ROT объекта может быть "! VisualStudio.DTE.10.0: 1234," где 1234 - идентификатор процесса.

0 голосов
/ 25 ноября 2011

Не совсем уверен, что это то, что вы ищете, но переменные среды Windows можно изменить из (при условии Windows 7): Панель управления -> Система и безопасность -> Система -> Расширенные настройки системы -> Переменные среды (кнопка).

На этом экране вы можете установить как пользовательские, так и системные переменные.Возможно, настройки, которые вы хотите найти в своем приложении, хранятся под пользователем, а не в системе, а затем открытие приложения под другим пользователем приводит к тому, что эти переменные становятся недоступными?

Будет ли создание необходимых вам переменных,системные переменные решают вашу проблему?

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