查找Visual Studio的安装路径

yjghlzjz  于 2023-01-02  发布在  其他
关注(0)|答案(6)|浏览(703)

我需要有关如何找到Microsoft Visual Studio的安装路径的帮助。我需要在程序中使用该路径。要获取Microsoft Visual Studio的安装路径,必须调用什么函数?

cpjpxq1n

cpjpxq1n1#

根据应用程序的不同,可能最好询问用户,但这里有一些C#代码应该可以完成VS2008的任务。

RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\VisualStudio\9.0\Setup\VS");
string vsInstallationPath = regKey.GetValue("ProductDir").ToString();
regKey.Close();
pgx2nnw8

pgx2nnw82#

通过搜索注册表可能可以找到它,但是由于我需要构建脚本的解决方案,所以一直使用环境变量来实现这一点。
注意:要查询的环境变量的名称特定于版本。
对于VS2005,您可以使用VS80COMNTOOLS
对于VS2008,您可以使用VS90COMNTOOLS
如果在命令提示符下键入SET VS90COMNTOOLS,您将看到:VS90COMNTOOLS=C:\程序文件\Microsoft Visual Studio 9.0\常用7\工具
因此,向上两个文件夹找到安装路径的根目录。

u4vypkhs

u4vypkhs3#

这是了解VS或任何其他程序的安装文件夹的最快方法。
打开VS代码并在其运行时;打开Windows任务管理器并导航到详细信息选项卡
右键单击现在应该正在运行的Code.exe应用程序,然后选择选项打开文件位置

Windows任务管理器详细信息选项卡〉右键单击Code.exe打开文件位置

ftf50wuq

ftf50wuq4#

从注册表中选择“HKLM\软件\Microsoft\Visual Studio \9.0\Visual Studio 2008的安装目录

guykilcj

guykilcj5#

这是Visual Studio的某种外接程序吗?
因为否则,您需要注意运行您的程序的人可能实际上没有安装Visual Studio。
如果 * 已 * 安装,通常可以在注册表中的已知位置找到它,例如VS2008的HKCR/Applications/devenv.exe/shell/edit/command

sy5wg1nm

sy5wg1nm6#

对于较新版本的VS,最好从Microsoft提供的API使用,因为安装信息不再正确地保存在注册表中。
1.安装Nuget包Microsoft.VisualStudio.安装.配置.本机
1.执行此操作(返回的是包含所有VS示例的版本和路径的元组):

private const int REGDB_E_CLASSNOTREG = unchecked((int)0x80040154);

 public static IEnumerable<(string, string)> GetVisualStudioInstallPaths() 
 {
     var result = new List<(string, string)>();

     try
     {
         var query = new SetupConfiguration() as ISetupConfiguration2;
         var e = query.EnumAllInstances();

         int fetched;
         var instances = new ISetupInstance[1];

         do
         {
             e.Next(1, instances, out fetched);

             if (fetched > 0)
             {
                 var instance2 = (ISetupInstance2)instances[0];
                 result.Add((instance2.GetInstallationVersion(), instance2.GetInstallationPath()));
             }
         }
         while (fetched > 0);
     }
     catch (COMException ex) when (ex.HResult == REGDB_E_CLASSNOTREG)
     {
     }
     catch (Exception)
     {
     }

     return result;
 }

问候

相关问题