Avec les versions précédentes de VS, vous pouvez interroger le registre pour déterminer le répertoire d'installation de VS:
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0
Cependant, cela ne semble pas fonctionner avec le VS2017 RC. Nous avons des scripts qui détectent le dernier VS installé et font ensuite "ce qu'il faut", et jusqu'à présent, j'ai des problèmes pour brancher le VS2017 sur ces systèmes.
Est-ce que quelqu'un sait comment déterminer par programme l'emplacement d'installation de VS2017?
Vous pouvez utiliser vswhere
tool pour obtenir l'emplacement de VS2017.
Exemple:
@echo off
rem VS2017U2 contains vswhere.exe
if "%VSWHERE%"=="" set "VSWHERE=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe"
for /f "usebackq tokens=*" %%i in (`"%VSWHERE%" -latest -products * -requires Microsoft.Component.MSBuild -property installationPath`) do (
set InstallDir=%%i
)
if exist "%InstallDir%\MSBuild\15.0\Bin\MSBuild.exe" (
"%InstallDir%\MSBuild\15.0\Bin\MSBuild.exe" %*
)
Vous pouvez en savoir plus à ce sujet ici: https://blogs.msdn.Microsoft.com/heaths/2017/02/25/vswhere-available/
Visual Studio 2017 prend en charge les installations côte à côte, sans registre, de toutes les SKU (Entreprise, Professionnel et Communauté).
Les installeurs MSI peuvent interroger via les API décrites ici: https://blogs.msdn.Microsoft.com/heaths/2016/09/15/changes-to-visual-studio-15-setup/
Les exemples sont ici:
Eh bien, vswhere.exe ne fournit pas vraiment plus que le chemin d’installation de l’édition Visual Studio. Voici mon extrait de fichier .profile Interix de 2008 faisant de même avec une mise à jour mineure (script Shell):
if [[ -n $PROCESSOR_ARCHITEW6432 || $PROCESSOR_ARCHITECTURE != "x86" ]]; then
hkeybase='HKLM\SOFTWARE\Wow6432Node\Microsoft\'
else
hkeybase='HKLM\SOFTWARE\Microsoft\'
fi
for vsver in "15.0" "14.0" "12.0" "11.0" "10.0" "9.0" "8.0"; do
_vsinstalldir=$(reg.exe query ${hkeybase}'VisualStudio\SxS\VS7' -v $vsver 2>/dev/null \
| sed -n 's|.*REG_SZ *\([ [:print:]]*\).*|\1|p' | sed 's|\\|/|g')
if [[ -n $_vsinstalldir ]]; then break; fi
done; unset vsver
Cela énumère les installations de Visual Studio privilégiant la dernière clé de registre.
HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7
Je travaille toujours pour Visual Studio 2017. Il serait facile de traduire en syntaxe cmd. Pour interroger le registre est plus simple et ne nécessite pas vswhere.exe dans votre chemin, donc favorable OMI.
Rechercher l’instance actuelle de Visual C++ et les kits de développement logiciel est une toute autre tâche. :RÉ
Sortie commune au cas où vous vous demanderiez:
C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/
La solution de KindDragon ne fonctionnait pas tout à fait pour moi en raison de la "fonctionnalité" de "développement différé" de batch. (WAT)
Voici mon code, compatible avec VS 2017 15.2 (pour l'installation de vswhere.exe)
SETLOCAL EnableDelayedExpansion
if not exist "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" (
echo "WARNING: You need VS 2017 version 15.2 or later (for vswhere.exe)"
)
for /f "usebackq tokens=*" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -products * -requires Microsoft.Component.MSBuild -property installationPath`) do (
set InstallDir=%%i
)
if exist "!InstallDir!\VC\Auxiliary\Build\vcvars64.bat" (
call "!InstallDir!\VC\Auxiliary\Build\vcvars64.bat"
) else (
echo "Could not find !InstallDir!\VC\Auxiliary\Build\vcvars64.bat"
)
Noter particulièrement l'utilisation de SETLOCAL EnableDelayedExpansion et! InstallDir!
J'ai eu du mal à essayer de modifier la réponse de Srekel pour ne rechercher que VS2017. Remarque: Si vous mettez l'instruction "for" ci-dessous à l'intérieur d'un bloc "if", elle détruira les caractères d'échappement et ne fonctionnera pas.
SETLOCAL EnableDelayedExpansion
if not exist "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" (
echo "WARNING: You need VS 2017 version 15.2 or later (for vswhere.exe)"
)
set vswherestr=^"!ProgramFiles(x86)!\Microsoft Visual Studio\Installer\vswhere.exe^" -version [15.0,16.0^^) -products * -requires Microsoft.Component.MSBuild -property installationPath
for /f "usebackq tokens=*" %%i in (`!vswherestr!`) do (
set BUILDVCTOOLS=%%i\Common7\Tools
echo BUILDVCTOOLS: !BUILDVCTOOLS!
if not exist !BUILDVCTOOLS!\VsDevCmd.bat (
echo Error: Cannot find VS2017 Build Tools
goto :buildfailed
)
call "!BUILDVCTOOLS!\VsDevCmd.bat"
)
Il est possible d'interroger le chemin d'installation de Visual Studio à partir du registre, voir la réponse suivante:
https://stackoverflow.com/a/48915860/2338477
Vous pouvez utiliser le traitement par lots lui-même et le restituer à l’application ou encore plus simplement - utiliser les fonctions de registre pour interroger la valeur de la clé.
Les limites de cette approche sont décrites dans la réponse.
Puis-je recommander mon paquet get-vs2017-path il n’utilise que les outils Windows intégrés (et bien qu’il soit construit comme un paquet NPM
, il n’a pas de dépendances et le dossier des outils fonctionne de manière autonome)