找到Visual Studio 2017的devenv.exe位置的可靠方法

时间:2017-03-10 08:02:56

标签: visual-studio-2017 devenv

我需要使用devenv.exe(或devenv.com来运行构建可视工作室解决方案的脚本)。对于visual studio 2015,我可以使用环境变量%VS140COMNTOOLS%来查找 devenv 的安装位置。从there is no %VS150COMNTOOLS% for Visual Studio 2017开始,在脚本(bat或powershell)中找到devenv的安装位置的可靠方法。

5 个答案:

答案 0 :(得分:11)

一种方法是使用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\"

答案 1 :(得分:9)

您可以use 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/

答案 2 :(得分:0)

这是一个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
}

答案 3 :(得分:0)

不幸的是,我自己的使用注册表的解决方案在Visual Studio 2019中无法正常运行,因为可以从“卸载注册表”路径中查询vs2019安装路径,但是由于您可能需要逐步浏览子注册表项而开始有点困难

我也尝试过一点vswhere.exe,但是它的用法也有点困难-需要重新解析其输出。

与此同时,我需要类似于vswhere的内容,并一目了然,并在名为cppexec.exe的命令行工具下重写了它。

用法是这样的:

D:\Prototyping\cppscriptcore>cppexec.exe -location
Visual studio 2019:
location: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise

Visual studio 2017:
location: C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise

D:\Prototyping\cppscriptcore>cppexec.exe -location -vs 2017
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise

D:\Prototyping\cppscriptcore>cppexec.exe -location -vs 2019
C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise

要使用它,请下载两个文件:

https://github.com/tapika/cppscriptcore/blob/master/cppexec.exe https://github.com/tapika/cppscriptcore/blob/master/SolutionProjectModel.dll

如果您有兴趣集成到自己的项目中,请查看以下源代码:

https://github.com/tapika/cppscriptcore/blob/master/SolutionProjectModel/VisualStudioInfo.cpp https://github.com/tapika/cppscriptcore/blob/master/SolutionProjectModel/VisualStudioInfo.h

我已将vswhere重新编码为更简单的方式。

答案 4 :(得分:0)

我发现了一种非常简单的方法,只需运行Visual Studio开发人员命令提示符,然后运行以下命令:where devenv

它将返回devenv.com和devenv.exe文件的完整路径