Visual Studio 2010自动化和环境变量

我正在使用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对象的实例时,它从winlogon.exe启动devenv.exe进程,它看到的环境与我的应用程序完全不同。 某些环境变量对于解析项目中设置的某些路径很重要。

有没有我可以如何影响devenv.exe进程的环境变量? 有什么方法可以使用VS2010自动化接口注入环境/属性吗?

是否有可能在您的环境中自己开始devenv。 然后通过运行对象表(ROT)开始运行Visual Studio实例 。

 // 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实例的进程ID。

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

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

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

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