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及其下的工具->命令行->开发人员命令提示符