C# Visual Studio 2010自动化和环境变量

C# Visual Studio 2010自动化和环境变量,c#,visual-studio,visual-studio-2010,com,automation,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对象的实例时,它从winlogon.ex

我正在使用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自动化接口注入环境/属性?

不完全确定这是否是您想要的,但windows环境变量可以从以下位置更改(假设windows 7):控制面板->系统和安全->系统->高级系统设置->环境变量(按钮)

在此屏幕中,您可以设置用户变量和系统变量。也许您希望应用程序查找的设置存储在用户而不是系统下,然后在其他用户下打开应用程序会导致这些变量不可用


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

是否可以在您的环境中自己启动devenv。然后,通过跑步对象表(ROT)获得跑步体验

如果有多个正在运行的VS实例,您将遇到问题,但这也是一个简单的实例。您只需要知道自启动VS实例的进程id,就可以获得一个新的VS实例

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


不,更改全局环境变量不是一个选项。我需要从创建COM对象的进程继承变量。@wilx抱歉,我似乎找不到任何访问(非当前)进程环境的方法。但奇怪的是,我也找不到任何(可靠的)不可能的来源。不过,仅仅出于安全原因,这可能是不可能的。这非常有趣!我得检查一下这个拳头。谢谢这个问题可能需要更多的背景;你的最终目标是什么?回归测试?批量修改解决方案文件?不同的技术适用于不同的环境影响情况和类型。也就是说,您可能希望查看Machine.config,它可以提供适用于在特定计算机上创建的所有实例的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");