以编程方式检索Visual Studio安装目录

visual-studio

20828 观看

12回复

8623 作者的声誉

我知道有一个注册表项指示安装目录,但不记得它是什么。

目前对VS2008安装目录感兴趣,虽然列出其他人以备将来参考也不会有什么坏处。

作者: Emperor XLII 的来源 发布者: 2008 年 8 月 27 日

回应 (12)


11

430 作者的声誉

决定

我确信还有一个注册表项,但我无法轻易找到它。您也可以使用VS90COMNTOOLS环境变量。

作者: ZebZiggle 发布者: 27.08.2008 03:51

5

8623 作者的声誉

环境:感谢Zeb和Sam提出的VS*COMNTOOLS环境变量建议。要在PowerShell中访问IDE:

$vs = Join-Path $env:VS90COMNTOOLS '..\IDE\devenv.exe'

注册表:看起来像注册表位置HKLM\Software\Microsoft\VisualStudio,每个安装都有特定于版本的子项。在PowerShell中:

$vsRegPath = 'HKLM:\Software\Microsoft\VisualStudio\9.0'
$vs = (Get-ItemProperty $vsRegPath).InstallDir + 'devenv.exe'

[改编自此处 ]

作者: Emperor XLII 发布者: 27.08.2008 03:55

0

11118 作者的声誉

是不是有环境设置?我有VCToolkitInstallDirVS71COMNTOOLS虽然我正在使用VS2003,但我不知道这是否会因以后的版本而改变。在命令行键入“set V”,看看是否有它们。

作者: Sam Hasler 发布者: 27.08.2008 03:56

2

0 作者的声誉

啊,64位机器部分是问题。结果我需要确保我在syswow64目录下运行PowerShell.exe以获取x86注册表项。

现在这不是很有趣。

作者: Jeff 发布者: 22.12.2008 09:09

2

21 作者的声誉

Environment.GetEnvironmentVariable("VS90COMNTOOLS");在64位环境中也使用,它适用于我。

作者: peter 发布者: 17.03.2010 08:32

22

480 作者的声誉

我使用此方法查找Visual Studio 2010的安装路径:

    private string GetVisualStudioInstallationPath()
    {
        string installationPath = null;
        if (Environment.Is64BitOperatingSystem)
        {
            installationPath = (string)Registry.GetValue(
               "HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\VisualStudio\\10.0\\",
                "InstallDir",
                null);
        }
        else
        {
            installationPath = (string)Registry.GetValue(
       "HKEY_LOCAL_MACHINE\\SOFTWARE  \\Microsoft\\VisualStudio\\10.0\\",
              "InstallDir",
              null);
        }
        return installationPath;

    }
作者: Dim_Ka 发布者: 09.09.2011 02:32

9

10248 作者的声誉

注册表方法

我建议查询注册表以获取此信息。这给出了实际的安装目录,而不需要组合路径,它也适用于快速版本。这可能是一个重要的区别,具体取决于您需要做什么(例如,模板根据Visual Studio的版本安装到不同的目录)。注册表位置如下(请注意,Visual Studio是一个32位程序,将安装到x64计算机上的注册表的32位部分):

  • Visual Studio:HKLM \ SOFTWARE \ Microsoft \ Visual Studio \ Major.Minor:InstallDir
  • Visual C#Express:HKLM \ SOFTWARE \ Microsoft \ VCSExpress \ Major.Minor:InstallDir
  • Visual Basic Express:HKLM \ SOFTWARE \ Microsoft \ VBExpress \ Major.Minor:InstallDir
  • Visual C ++ Express:HKLM \ SOFTWARE \ Microsoft \ VCExpress \ Major.Minor:InstallDir

其中Major是主要版本号,Minor是次要版本号,冒号后面的文本是注册表值的名称。例如,Visual Studio 2008 Professional的安装目录将位于InstallLir值中的HKLM \ SOFTWARE \ Microsoft \ Visual Studio \ 9.0密钥中。

这是一个代码示例,它打印几个版本的Visual Studio和Visual C#Express的安装目录:

string visualStudioRegistryKeyPath = @"SOFTWARE\Microsoft\VisualStudio";
string visualCSharpExpressRegistryKeyPath = @"SOFTWARE\Microsoft\VCSExpress";

List<Version> vsVersions = new List<Version>() { new Version("10.0"), new Version("9.0"), new Version("8.0") };
foreach (var version in vsVersions)
{
    foreach (var isExpress in new bool[] { false, true })
    {
        RegistryKey registryBase32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
        RegistryKey vsVersionRegistryKey = registryBase32.OpenSubKey(
            string.Format(@"{0}\{1}.{2}", (isExpress) ? visualCSharpExpressRegistryKeyPath : visualStudioRegistryKeyPath, version.Major, version.Minor));
        if (vsVersionRegistryKey == null) { continue; }
        Console.WriteLine(vsVersionRegistryKey.GetValue("InstallDir", string.Empty).ToString());
    }

环境变量法

Visual Studio的非快速版本也编写了一个可以检查的环境变量,但它给出了常用工具目录的位置,而不是安装目录,因此您必须进行一些路径组合。环境变量的格式为VS * COMNTOOLS,其中*是主要版本号和次要版本号。例如,Visual Studio 2010的环境变量是VS100COMNTOOLS,并包含类似C:\ Program Files \ Microsoft Visual Studio 10.0 \ Common7 \ Tools的值

下面是一些示例代码,用于为多个版本的Visual Studio打印环境变量:

List<Version> vsVersions = new List<Version>() { new Version("10.0"), new Version("9.0"), new Version("8.0") };
foreach (var version in vsVersions)
{
    Console.WriteLine(Path.Combine(Environment.GetEnvironmentVariable(string.Format("VS{0}{1}COMNTOOLS", version.Major, version.Minor)), @"..\IDE"));
}
作者: Kevin Kibler 发布者: 20.12.2011 05:40

1

11 作者的声誉

这是一个始终获得最新版本路径的解决方案:

$vsEnvVars = (dir Env:).Name -match "VS[0-9]{1,3}COMNTOOLS"
$latestVs = $vsEnvVars | Sort-Object | Select -Last 1
$vsPath = Get-Content Env:\$latestVs
作者: Stefan Cepcik 发布者: 27.04.2014 08:38

2

4039 作者的声誉

@ Dim-Ka有一个很好的答案。如果您对如何在批处理脚本中实现它感到好奇,那就是这样的。

@echo off
:: BATCH doesn't have logical or, otherwise I'd use it
SET platform=
IF /I [%PROCESSOR_ARCHITECTURE%]==[amd64] set platform=true
IF /I [%PROCESSOR_ARCHITEW6432%]==[amd64] set platform=true

:: default to VS2012 = 11.0
:: the Environment variable VisualStudioVersion is set by devenv.exe
:: if this batch is a child of devenv.exe external tools, we know which version to look at
if not defined VisualStudioVersion SET VisualStudioVersion=11.0

if defined platform (
set VSREGKEY=HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\%VisualStudioVersion%
)  ELSE (
set VSREGKEY=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\%VisualStudioVersion%
)
for /f "skip=2 tokens=2,*" %%A in ('reg query "%VSREGKEY%" /v InstallDir') do SET VSINSTALLDIR=%%B

echo %VSINSTALLDIR%
作者: JJS 发布者: 11.11.2014 08:54

0

51 作者的声誉

请注意,如果您使用的是Visual Studio Express或Visual C ++ Express,则键名分别包含WDExpress或VCExpress,而不是VisualStudio。

作者: cniggeler 发布者: 19.01.2015 09:39

1

114 作者的声誉

您可以阅读VSINSTALLDIR环境变量。

作者: eXe 发布者: 15.06.2016 06:01

0

144 作者的声誉

对于VS 2017和2019,有来自Microsoft的Setup API。在C#中只需添加NuGet包“Microsoft.VisualStudio.Setup.Configuration.Interop”并以这种方式使用它:

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

        var helper = (ISetupHelper)query;

        int fetched;
        var instances = new ISetupInstance[1];
        do {
            e.Next(1, instances, out fetched);
            if (fetched > 0)
                Console.WriteLine(instances[0].GetInstallationPath());
        }
        while (fetched > 0);
        return 0;
    }
    catch (COMException ex) when (ex.HResult == REGDB_E_CLASSNOTREG) {
        Console.WriteLine("The query API is not registered. Assuming no instances are installed.");
        return 0;
    }

您可以在此处找到更多VC,C#和VB示例

作者: vik_78 发布者: 07.03.2019 05:01
来自类别的问题 :
32x32