2017-02-24 161 views
3

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

它仍然使用较低的版本,但是。

从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位置)的最佳方法是什么?

回答

7

从我所看到的,使用的SxS \ VS7选项:

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

它应该给你的根路径到Visual Studio:

enter image description here

这应该让你去。

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

值得指出的是,VS2017允许多个安装相同的版本(例如,您可以将Community,Pro和Enterprise全部安装到不同的路径),并且我不确定哪个人能够在此获得注册表值案件。 – Jimmy

+1

这种方法是完全正确的,这个注册表项只列出对应于VS2017第一种安装类型的条目。假设你先安装社区版,然后安装企业。注册表项将在您首先安装时继续指向社区版路径。现在,如果你甚至卸载社区版本,注册表入口还是应该社区版本。 –

+0

有关如何在PowerShell中提取'15.0'值的信息,请参见[answer](https://stackoverflow.com/a/43912590/285795)。 – OmegaMan

2

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

tf.exe位置然后使用下一个符号链接存储。

否则,您可能需要依靠Nuget package这是检测VS的支持手段。

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