【问题标题】:Determining Installed Visual Studio Path for 2017确定 2017 年安装的 Visual Studio 路径
【发布时间】:2017-02-24 09:56:43
【问题描述】:

我有一个 powershell 脚本,它查看 VS 安装列表,并确定安装的最高版本。然后它使用该版本的 InstallDir,并使用它来访问各种命令。

不过,它仍然使用低版本。

从 VS2017 开始,注册表项似乎是 no longer saved in the same way。我需要更新脚本才能弄清楚 2017 年的设置。

#Add New Versions to this list when new versions of VS are released
$VsVersionsToDisable = "10.0", "11.0", "12.0", "14.0"

[System.Collections.ArrayList]$VsVersions = $VsVersionsToDisable

#Find the Highest installed VS Version, and use it for the TFS.exe Command.
foreach ($version in $VsVersions | Sort-Object -Descending)
{
    $keyPath = "HKCU:\Software\Microsoft\VisualStudio\$version`_Config"
    If (Test-Path $keyPath)
    {
        $aliasPath = Get-ItemProperty -Path $keyPath | Select-Object `
                            -ExpandProperty InstallDir
        $proxyPath = Join-Path $aliasPath "tf.exe"
        set-alias proxyTF $proxyPath
    }
}

为避免 XY 问题:我们使用此脚本为用户配置 TFS 代理设置。它确定安装的最高版本,使用它来查找代理,然后遍历较低版本,使用相同的值配置其代理设置。


确定 VS2017 的安装目录(以及 tf.exe 位置)的最佳方法是什么?

【问题讨论】:

    标签: powershell tfs registry visual-studio-2017


    【解决方案1】:

    据我所知,使用 SxS\VS7 选项:

    HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\SxS\VS7
    

    它应该为您提供 Visual Studio 的根路径:

    这应该能让你继续前进。

    tf.exe 位置随后使用以下符号链接存储:

    .\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\tf.exe
    

    【讨论】:

    • 值得指出的是,VS2017 允许多次安装同一版本(例如,您可以将 Community、Pro 和 Enterprise 都安装到不同的路径),我不确定哪个会得到本例中的注册表值。
    • 这种做法完全正确,这个注册表项只列出了VS2017的第一种安装类型对应的项。假设您先安装社区版,然后安装企业版。当您首先安装它时,注册表项将继续指向社区版本路径。现在,即使您卸载社区版,注册表项也应该是社区版。
    • 参见answer,了解如何在 powershell 中提取 15.0 值。
    【解决方案2】:

    由于您使用的是 PowerShell,请查看https://github.com/microsoft/vssetup.powershell,这是一个用于检测 VS2017+ 安装的 PS 模块。

    否则,您可能需要依赖Nuget package,这是检测 VS 的受支持方法。

    另请参阅this answer 的相关问题,该问题早于我上面列出的 PS 模块,但包含一些不受支持的查找 VS 的方法。

    【讨论】:

      【解决方案3】:

      我确实将此作为参考,并以另一种方式找到了解决方案。 我不确定它对于其他版本的弹性有多大,但它对我有用。它是 devenv 的目录,然后我在 TFS 的末尾添加了额外的目录。显然,如果结构不同,那么我们就完蛋了。 希望对您有所帮助。

          $regKey = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\devenv.exe"
          $visualStudioDir = Get-ItemPropertyValue -Path $regKey -Name "(Default)"
          $visualStudioDir = ($visualStudioDir.Replace("devenv.exe","")).replace("`"","")
          $tfsPath = 'CommonExtensions\Microsoft\TeamFoundation\Team Explorer\tf.exe'
          Set-Alias tf $visualStudioDir$tfsPath
          tf workspaces
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-03
        • 1970-01-01
        • 1970-01-01
        • 2018-02-09
        • 2018-02-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多