I need to run scripts that build a visual studio solutions using devenv.exe
(or devenv.com
for that matter). For visual studio 2015 there was an environment variable %VS140COMNTOOLS%
that I could use to find the install location of devenv. Since there is no %VS150COMNTOOLS%
for Visual Studio 2017, what would be a reliable way to find the install location of devenv
in a script (bat or powershell).
Devenv.exe file information Devenv.exe is located in a subfolder of "C:\Program Files (x86)"—usually C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\.
They are all located in the C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE directory.
Devenv lets you set various options for the IDE, build projects, debug projects, and deploy projects from the command line. Use these switches to run the IDE from a script or a . bat file (such as a nightly build script), or to start the IDE in a particular configuration.
One way is to use power shell and vswhere.exe. But I'm bit lazy to install new tools and ...
I was trying to find simpler solution and found it from registry - there exists registry key HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7
, which lists all Visual studio installations.
One of limitations mentioned in this link: https://developercommunity.visualstudio.com/content/problem/2813/cant-find-registry-entries-for-visual-studio-2017.html
If there is more than one edition of 2017 installed, then it seems the last one installed will have their path in this key.
But typically you install only one visual studio for build or use purpose.
Also I've coded this sample from 64-bit machine perspective, I think Wow6432Node
does not exits in 32-bit machines, but really - how many developers use 32-bit machines nowadays ?
So if you're fine with limitations above, here is a simple batch which can query visual studio installation path:
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
Can be executed like this:
>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\"
You can use vswhere.exe
or powershell to find your Visual Studio instances:
for /r "usebackq tokens=1* delims=: " %%i in (`vswhere.exe -latest -requires Microsoft.VisualStudio.Workload.NativeDesktop`) do ( if /i "%%i"=="installationPath" set dir=%%j )
and
Install-Module VSSetup -Scope CurrentUser Get-VSSetupInstance | Select-VSSetupInstance -Latest -Require Microsoft.VisualStudio.Component.VC.Tools.x86.x64
The path to specific workloads can be found through this api as well.
https://blogs.msdn.microsoft.com/vcblog/2017/03/06/finding-the-visual-c-compiler-tools-in-visual-studio-2017/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With