找到 Visual Studio 2017 年 devenv.exe 位置的可靠方法
reliable way to find the location devenv.exe of Visual Studio 2017
我需要 运行 使用 devenv.exe
(或 devenv.com
构建 visual studio 解决方案的脚本。对于 visual studio 2015,有一个环境变量 %VS140COMNTOOLS%
,我可以使用它来查找 devenv 的安装位置。由于 there is no %VS150COMNTOOLS%
for Visual Studio 2017,在脚本(bat 或 powershell)中找到 devenv
安装位置的可靠方法是什么。
您可以 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 找到特定工作负载的路径。
一种方法是使用电源 shell 和 vswhere.exe。但是我有点懒得安装新工具和...
我试图找到更简单的解决方案并从注册表中找到它 - 存在注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7
,它列出了所有 Visual studio 安装。
这里提到的限制之一link:
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 Studio17\Professional\"
这是一个 PowerShell 函数,可用于获取 DevEnv.exe
路径。您还可以轻松修改它以查找其他常用组件,例如 MsBuild.exe
或 TF.exe
,只需更改 -Filter
.
中使用的硬编码 DevEnv.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
文件和 returns 其完整路径。
不幸的是,我在此处使用注册表的解决方案不适用于 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 Studio19\Enterprise
Visual studio 2017:
location: C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise
D:\Prototyping\cppscriptcore>cppexec.exe -location -vs 2017
C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise
D:\Prototyping\cppscriptcore>cppexec.exe -location -vs 2019
C:\Program Files (x86)\Microsoft Visual Studio19\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
重新编码为更简单的方式。
我找到了一个非常简单的方法,只需 运行 Visual Studio 开发人员命令提示符和 运行 这个命令:其中 devenv
它将 return devenv.com 和 devenv.exe 文件的完整路径
我需要 运行 使用 devenv.exe
(或 devenv.com
构建 visual studio 解决方案的脚本。对于 visual studio 2015,有一个环境变量 %VS140COMNTOOLS%
,我可以使用它来查找 devenv 的安装位置。由于 there is no %VS150COMNTOOLS%
for Visual Studio 2017,在脚本(bat 或 powershell)中找到 devenv
安装位置的可靠方法是什么。
您可以 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 找到特定工作负载的路径。
一种方法是使用电源 shell 和 vswhere.exe。但是我有点懒得安装新工具和...
我试图找到更简单的解决方案并从注册表中找到它 - 存在注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7
,它列出了所有 Visual studio 安装。
这里提到的限制之一link: 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 Studio17\Professional\"
这是一个 PowerShell 函数,可用于获取 DevEnv.exe
路径。您还可以轻松修改它以查找其他常用组件,例如 MsBuild.exe
或 TF.exe
,只需更改 -Filter
.
DevEnv.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
文件和 returns 其完整路径。
不幸的是,我在此处使用注册表的解决方案不适用于 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 Studio19\Enterprise
Visual studio 2017:
location: C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise
D:\Prototyping\cppscriptcore>cppexec.exe -location -vs 2017
C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise
D:\Prototyping\cppscriptcore>cppexec.exe -location -vs 2019
C:\Program Files (x86)\Microsoft Visual Studio19\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
重新编码为更简单的方式。
我找到了一个非常简单的方法,只需 运行 Visual Studio 开发人员命令提示符和 运行 这个命令:其中 devenv
它将 return devenv.com 和 devenv.exe 文件的完整路径