问题 查找Visual Studio 2017的devenv.exe位置的可靠方法


我需要运行使用构建visual studio解决方案的脚本 devenv.exe (要么 devenv.com 对于这个问题)。对于visual studio 2015,有一个环境变量 %VS140COMNTOOLS% 我可以用来找到安装位置 devenv的。以来 没有 %VS150COMNTOOLS% 对于Visual Studio 2017什么是找到安装位置的可靠方法 devenv 在脚本(bat或powershell)中。


1001
2018-03-10 08:02


起源

看到: blogs.msdn.microsoft.com/vcblog/2017/03/06/... - jessehouwing
可能重复 以编程方式查找VS2017安装目录 - KindDragon


答案:


您可以 使用 vswhere.exe 或PowerShell来查找您的Visual Studio实例:

for /r "usebackq tokens=1* delims=: " %%i in (`vswhere.exe -latest -requires Microsoft.VisualStudio.Workload.NativeDesktop`) do (
    if /i "%%i"=="installationPath" set dir=%%j
)

Install-Module VSSetup -Scope CurrentUser
Get-VSSetupInstance | Select-VSSetupInstance -Latest -Require Microsoft.VisualStudio.Component.VC.Tools.x86.x64

特定工作负载的路径也可以通过此API找到。

https://blogs.msdn.microsoft.com/vcblog/2017/03/06/finding-the-visual-c-compiler-tools-in-visual-studio-2017/


8
2018-03-10 08:58



无法找到“vswhere”。猜测它不在路径中,所以我们必须去它所在的地方,除了这意味着我们知道VS安装在哪里所以没有必要用vswhere查找它 - StingyJack
看起来Visual Studio的新目录结构将具有顶级目录 C:\Program Files (x86)\Microsoft Visual Studio 并且将在其下安装各种不同的工具(例如,有一个 2017 那里的目录。还提供了一个 Installer 目录,和 vswhere 工具就在那里。所以它不是每次发布。当然,如果你不在通常的地方安装,这没有帮助。但它似乎(最小测试)你可以复制vswhere任何地方,它仍然有效。它仍然比以前更严重,并且不适用于较旧的VS安装。 - MadScientist


一种方法是使用power shell和vswhere.exe。但我有点懒于安装新工具......

我试图找到更简单的解决方案,并从注册表中找到它 - 存在注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7,列出所有Visual Studio安装。

此链接中提到的限制之一: https://developercommunity.visualstudio.com/content/problem/2813/cant-find-registry-entries-for-visual-studio-2017.html

如果安装了多个2017版本,那么最后安装的版本似乎将在此密钥中显示其路径。

但通常只安装一个Visual Studio用于构建或使用目的。

我想,我也是从64位机器的角度对这个样本进行编码的 Wow6432Node 在32位机器中没有退出,但实际上 - 现在有多少开发人员使用32位机器?

因此,如果你对上述限制没有问题,这里有一个简单的批处理,它可以查询visual studio的安装路径:

test.bat :

@echo off
setlocal 
call:vs%1 2>nul
if "%n%" == "" (
    echo Visual studio is not supported.
    exit /b
)
for /f "tokens=1,2*" %%a in ('reg query "HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" /v "%n%.0" 2^>nul') do set "VSPATH=%%c"
if "%VSPATH%" == "" (
    echo Visual studio %1 is not installed on this machine
    exit /b
)

echo Visual studio %1 path is "%VSPATH%"
endlocal & exit /b

:vs2017
    set /a "n=%n%+1"
:vs2015
    set /a "n=%n%+2"
:vs2013
    set /a "n=%n%+1"
:vs2012
    set /a "n=%n%+1"
:vs2010
    set /a "n=%n%+10"
    exit /b

可以像这样执行:

>test 2010
Visual studio 2010 path is "C:\Program Files (x86)\Microsoft Visual Studio 10.0\"

>test 2012
Visual studio 2012 path is "C:\Program Files (x86)\Microsoft Visual Studio 11.0\"

>test 2013
Visual studio 2013 path is "C:\Program Files (x86)\Microsoft Visual Studio 12.0\"

>test 2014
Visual studio is not supported.

>test 2015
Visual studio 2015 path is "C:\Program Files (x86)\Microsoft Visual Studio 14.0\"

>test 2017
Visual studio 2017 path is "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\"

7
2018-02-21 21:34





这是一个PowerShell函数,可用于获取DevEnv.exe路径。您也可以轻松修改它以找到其他常见组件,例如 MsBuild.exe 要么 TF.exe 只需改变硬编码即可 DevEnv.exe 用于的字符串 -Filter

function Get-DevEnvExecutableFilePath
{
    [bool] $vsSetupExists = $null -ne (Get-Command Get-VSSetupInstance -ErrorAction SilentlyContinue)
    if (!$vsSetupExists)
    {
        Write-Verbose "Importing the VSSetup module..."
        Install-Module VSSetup -Scope CurrentUser -Force
    }
    [string] $visualStudioInstallationPath = (Get-VSSetupInstance | Select-VSSetupInstance -Latest -Require Microsoft.Component.MSBuild).InstallationPath

    $devEnvExecutableFilePath = (Get-ChildItem $visualStudioInstallationPath -Recurse -Filter "DevEnv.exe" | Select-Object -First 1).FullName
    return $devEnvExecutableFilePath
}

0
2017-09-16 23:56