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

Visual studio 2017 找到Visual Studio 2017的devenv.exe位置的可靠方法,visual-studio-2017,devenv,Visual Studio 2017,Devenv,我需要运行使用devenv.exe(或devenv.com)构建visual studio解决方案的脚本。对于visual studio 2015,有一个环境变量%VS140COMNTOOLS%,我可以使用它查找devenv的安装位置。既然如此,在脚本(bat或powershell)中查找devenv安装位置的可靠方法是什么 for /r "usebackq tokens=1* delims=: " %%i in (`vswhere.exe -latest -requires Microsoft

我需要运行使用
devenv.exe
(或
devenv.com
)构建visual studio解决方案的脚本。对于visual studio 2015,有一个环境变量
%VS140COMNTOOLS%
,我可以使用它查找devenv的安装位置。既然如此,在脚本(bat或powershell)中查找
devenv
安装位置的可靠方法是什么

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

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


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

我试图找到更简单的解决方案,并从注册表中找到了它-存在注册表项
HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7
,其中列出了所有Visual studio安装

此链接中提到的限制之一:

如果安装了2017的多个版本,则最后安装的版本的路径似乎在此密钥中

但通常您只安装一个VisualStudio用于构建或使用目的

我还从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\"
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

下面是一个PowerShell函数,可用于获取
DevEnv.exe
路径。只需更改
-Filter
中使用的硬编码
DevEnv.exe
字符串,即可轻松修改它以查找其他常见组件,如
MsBuild.exe
TF.exe

function Get-DevEnvExecutableFilePath
{
    [bool] $vsSetupExists = $null -ne (Get-Command Get-VSSetupInstance -ErrorAction SilentlyContinue)
    if (!$vsSetupExists)
    {
        Write-Verbose "Installing 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
}

它的工作原理是安装
VSSetup
模块(如果尚未安装),然后查询该模块以获取最新的Visual Studio安装路径。从那里,它在Visual Studio安装路径中搜索
DevEnv.exe
文件并返回其完整路径。

我自己的解决方案在此处使用注册表对Visual Studio 2019不起作用,不幸的是,它可以从卸载注册表路径查询vs2019安装路径,但is开始有点困难,因为您可能需要遍历子注册表项

我也尝试过一点
vswhere.exe
,但它的使用也有点困难-需要重新分析它的输出

同时,我需要类似于
vswhere
的东西,并浏览了一下它的实现,然后在我自己的命令行工具
cppexec.exe
下重新编写了它

用法如下:

>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\"
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
要使用它,请下载两个文件:

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


我已经用稍微简单一点的方式重新编码了
vswhere

我找到了一种非常简单的方法,只需运行Visual Studio Developer命令提示符,然后运行以下命令:where-devenv


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

请参阅:找不到可能重复的“vswhere”。猜测它不在路径中,因此我们必须转到它所在的位置,但这意味着我们知道VS安装在何处,因此使用VS查找它毫无意义,因为Visual Studio的新目录结构将具有顶级目录
C:\Program Files(x86)\Microsoft Visual Studio
和各种不同的工具将安装在该平台下(例如,下面有一个
2017
目录。还提供了一个
安装程序
目录,
vswhere
工具就位于该目录中。因此,它不是每个版本都有。当然,如果不在通常的位置安装,这不会有帮助。但是它看起来(最低限度的测试)您可以将vswhere复制到任何地方,但它仍然可以工作。它仍然比以前严重&不能用于较旧的VS安装。为完整起见,这里提供了完整的命令,用于获取powershell的实际安装路径:
$VSInstallPath=(获取VSSetupInstance |选择VSSetupInstance-最新-需要Microsoft.VisualStudio.Component.VC.Tools.x86.x64 |选择对象-第一个1)。MSFT Windows 10 x86-64``reg''实用程序上的InstallationPath
具有
/reg:32
命令行选项(我没有在更旧版本的操作系统上检查开关是否存在)。因此,您可以添加
-reg:32
并从脚本指定的注册表项中删除“`WOW6432Node”“。但我仍然不知道
-reg:32
选项是否适用于MSFT Windows 10 x86:-)上的“`reg.”很好的解决方案!你可以添加一些关于这个如何工作的详细信息吗?对我来说很有用。我在VS中找到的唯一相关窗口在中称为“命令窗口”,上面说>where devenv命令“where”无效。我想这取决于VS版本,我使用的是Enterprise 2019及其下的工具->命令行->开发人员命令提示符