Visual Studio 2010自动化和环境变量

时间:2011-09-15 09:32:23

标签: c# visual-studio visual-studio-2010 com automation

我正在使用C#和VS2010自动化打开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 个答案:

答案 0 :(得分:2)

是否可以在您的环境中自行启动devenv。然后通过运行对象表(ROT)开始运行Visual Studio Instance

// 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实例,则会遇到问题,但这也很容易。你可以开始specific VS instance,只需要知道你自己启动的VS实例的进程ID。

  

Visual Studio还将ProgID注册为ROT中的项目名字对象。   ProgID由DTE进程的名称和进程ID组成。   因此,例如,对象的ROT条目可能是   “!VisualStudio.DTE.10.0:1234,”其中1234是进程ID。

答案 1 :(得分:0)

不完全确定这是否是您正在寻找的,但可以更改Windows环境变量(假设Windows 7):控制面板 - >系统和安全 - >系统 - >高级系统设置 - >环境变量(按钮)。

在此屏幕中,您可以设置用户变量以及系统变量。您希望应用程序找到的设置可能存储在用户而不是系统下,然后在其他用户下打开应用程序会导致这些变量无法使用?

创建系统变量所需的变量会解决您的问题吗?