программно получить установочный каталог Visual Studio
20828 просмотра
12 ответа
8623 Репутация автора
Я знаю, что есть ключ реестра, указывающий каталог установки, но не помню, что это за руки.
В настоящее время интересуется установочным каталогом VS2008, хотя не мешало бы перечислить другие для дальнейшего использования.
Автор: Emperor XLII Источник Размещён: 27.08.2008 03:47Ответы (12)
11 плюса
430 Репутация автора
Я уверен, что есть запись в реестре, но я не мог легко найти ее. Существует переменная окружения VS90COMNTOOLS, которую вы также можете использовать.
Автор: ZebZiggle Размещён: 27.08.2008 03:515 плюса
8623 Репутация автора
Окружающая среда: Спасибо Зебу и Сэму за VS*COMNTOOLS
предложение переменных среды. Чтобы добраться до IDE в PowerShell:
$vs = Join-Path $env:VS90COMNTOOLS '..\IDE\devenv.exe'
Реестр: Похоже, что это место в реестре HKLM\Software\Microsoft\VisualStudio
с подключами для каждой версии для каждой версии. В PowerShell:
$vsRegPath = 'HKLM:\Software\Microsoft\VisualStudio\9.0'
$vs = (Get-ItemProperty $vsRegPath).InstallDir + 'devenv.exe'
[Адаптировано здесь ]
Автор: Emperor XLII Размещён: 27.08.2008 03:550 плюса
11118 Репутация автора
Разве нет настроек среды? Я имею VCToolkitInstallDir
и VS71COMNTOOLS
хотя я использую VS2003, я не знаю, изменилось ли это для более поздних версий. Введите «set V» в командной строке и посмотрите, есть ли они у вас.
2 плюса
0 Репутация автора
Ах, 64-битная машинная часть была проблемой. Оказывается, мне нужно убедиться, что я запускаю PowerShell.exe в каталоге syswow64, чтобы получить ключи реестра x86.
Теперь это было не очень весело.
Автор: Jeff Размещён: 22.12.2008 09:092 плюса
21 Репутация автора
Используйте Environment.GetEnvironmentVariable("VS90COMNTOOLS");
также в 64-битной среде, это работает для меня.
22 плюса
480 Репутация автора
Я использую этот метод, чтобы найти путь установки Visual Studio 2010:
private string GetVisualStudioInstallationPath()
{
string installationPath = null;
if (Environment.Is64BitOperatingSystem)
{
installationPath = (string)Registry.GetValue(
"HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\VisualStudio\\10.0\\",
"InstallDir",
null);
}
else
{
installationPath = (string)Registry.GetValue(
"HKEY_LOCAL_MACHINE\\SOFTWARE \\Microsoft\\VisualStudio\\10.0\\",
"InstallDir",
null);
}
return installationPath;
}
Автор: Dim_Ka
Размещён: 09.09.2011 02:32
9 плюса
10248 Репутация автора
Метод регистрации
Я рекомендую запросить реестр для получения этой информации. Это дает фактический каталог установки без необходимости сочетания путей, и это работает и для экспресс-выпусков. Это может быть важным отличием в зависимости от того, что вам нужно сделать (например, шаблоны устанавливаются в разные каталоги в зависимости от выпуска Visual Studio). Расположение реестра следующее (обратите внимание, что Visual Studio является 32-разрядной программой и будет установлена в 32-разрядном разделе реестра на компьютерах x64):
- Visual Studio: HKLM \ SOFTWARE \ Microsoft \ Visual Studio \ Major.Minor: InstallDir
- Visual C # Express: HKLM \ SOFTWARE \ Microsoft \ VCSExpress \ Major.Minor: InstallDir
- Visual Basic Express: HKLM \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ VBExpress \ Major.Minor: InstallDir
- Visual C ++ Express: HKLM \ SOFTWARE \ Microsoft \ VCExpress \ Major.Minor: InstallDir
где Major - основной номер версии, Minor - младший номер версии, а текст после двоеточия - имя значения реестра. Например, каталог установки Visual Studio 2008 Professional будет находиться по ключу HKLM \ SOFTWARE \ Microsoft \ Visual Studio \ 9.0 в значении InstallDir .
Вот пример кода, который печатает каталог установки нескольких версий Visual Studio и Visual C # Express:
string visualStudioRegistryKeyPath = @"SOFTWARE\Microsoft\VisualStudio";
string visualCSharpExpressRegistryKeyPath = @"SOFTWARE\Microsoft\VCSExpress";
List<Version> vsVersions = new List<Version>() { new Version("10.0"), new Version("9.0"), new Version("8.0") };
foreach (var version in vsVersions)
{
foreach (var isExpress in new bool[] { false, true })
{
RegistryKey registryBase32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
RegistryKey vsVersionRegistryKey = registryBase32.OpenSubKey(
string.Format(@"{0}\{1}.{2}", (isExpress) ? visualCSharpExpressRegistryKeyPath : visualStudioRegistryKeyPath, version.Major, version.Minor));
if (vsVersionRegistryKey == null) { continue; }
Console.WriteLine(vsVersionRegistryKey.GetValue("InstallDir", string.Empty).ToString());
}
Метод переменной среды
В неэкспресс-выпусках Visual Studio также пишется переменная среды, которую вы можете проверить, но в ней указывается расположение каталога общих инструментов, а не каталога установки, поэтому вам придется выполнить некоторое объединение путей. Формат переменной среды: VS * COMNTOOLS, где * - номер старшей и младшей версии. Например, переменная среды для Visual Studio 2010 - это VS100COMNTOOLS и содержит значение, например C: \ Program Files \ Microsoft Visual Studio 10.0 \ Common7 \ Tools .
Вот пример кода для печати переменной среды для нескольких версий Visual Studio:
List<Version> vsVersions = new List<Version>() { new Version("10.0"), new Version("9.0"), new Version("8.0") };
foreach (var version in vsVersions)
{
Console.WriteLine(Path.Combine(Environment.GetEnvironmentVariable(string.Format("VS{0}{1}COMNTOOLS", version.Major, version.Minor)), @"..\IDE"));
}
Автор: Kevin Kibler
Размещён: 20.12.2011 05:40
1 плюс
11 Репутация автора
Вот решение, чтобы всегда найти путь к последней версии:
$vsEnvVars = (dir Env:).Name -match "VS[0-9]{1,3}COMNTOOLS"
$latestVs = $vsEnvVars | Sort-Object | Select -Last 1
$vsPath = Get-Content Env:\$latestVs
Автор: Stefan Cepcik
Размещён: 27.04.2014 08:38
2 плюса
4039 Репутация автора
@ У Дим-Ка отличный ответ. Если вам интересно, как бы вы реализовали это в пакетном скрипте, вот как.
@echo off
:: BATCH doesn't have logical or, otherwise I'd use it
SET platform=
IF /I [%PROCESSOR_ARCHITECTURE%]==[amd64] set platform=true
IF /I [%PROCESSOR_ARCHITEW6432%]==[amd64] set platform=true
:: default to VS2012 = 11.0
:: the Environment variable VisualStudioVersion is set by devenv.exe
:: if this batch is a child of devenv.exe external tools, we know which version to look at
if not defined VisualStudioVersion SET VisualStudioVersion=11.0
if defined platform (
set VSREGKEY=HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\%VisualStudioVersion%
) ELSE (
set VSREGKEY=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\%VisualStudioVersion%
)
for /f "skip=2 tokens=2,*" %%A in ('reg query "%VSREGKEY%" /v InstallDir') do SET VSINSTALLDIR=%%B
echo %VSINSTALLDIR%
Автор: JJS
Размещён: 11.11.2014 08:54
0 плюса
51 Репутация автора
Обратите внимание, что если вы используете Visual Studio Express или Visual C ++ Express, имена ключей содержат соответственно WDExpress или VCExpress вместо VisualStudio.
Автор: cniggeler Размещён: 19.01.2015 09:391 плюс
114 Репутация автора
0 плюса
144 Репутация автора
Для VS 2017 и 2019 есть API установки от Microsoft. В C # просто добавьте пакет NuGet «Microsoft.VisualStudio.Setup.Configuration.Interop» и используйте его следующим образом:
try {
var query = new SetupConfiguration();
var query2 = (ISetupConfiguration2)query;
var e = query2.EnumAllInstances();
var helper = (ISetupHelper)query;
int fetched;
var instances = new ISetupInstance[1];
do {
e.Next(1, instances, out fetched);
if (fetched > 0)
Console.WriteLine(instances[0].GetInstallationPath());
}
while (fetched > 0);
return 0;
}
catch (COMException ex) when (ex.HResult == REGDB_E_CLASSNOTREG) {
Console.WriteLine("The query API is not registered. Assuming no instances are installed.");
return 0;
}
Больше образцов для VC, C # и VB вы можете найти здесь
Автор: vik_78 Размещён: 07.03.2019 05:01Вопросы из категории :
- visual-studio Ошибка Visual Studio: непредвиденная задача «GenerateResource»
- visual-studio Какой самый лучший бесплатный детектор утечки памяти для программы на C / C ++ и ее подключаемых библиотек DLL?
- visual-studio программно получить установочный каталог Visual Studio
- visual-studio В чем разница между Build Solution и Batch Build в Visual Studio 2008?
- visual-studio Как заставить Visual Studio заново создать файлы .designer для файлов aspx / ascx?
- visual-studio «Невозможно изменить тип DataType столбца после его получения» в Visual Studio 2005 DataSet Designer
- visual-studio Не удалось загрузить тип «XXX.Global»
- visual-studio Я не понимаю концепцию проектов и решений Visual Studio
- visual-studio Как определить, компилирую ли я код с определенной версией Visual Studio?
- visual-studio Would all ally would wouldyy wouldy wouldy would ally would would wouldyyy would wouldy would wouldy would wouldyyyyy would would ally would would wouldyyyyyyyyyy wouldyy would wouldyyy wouldy would would would ally would ally would ally all all all
- visual-studio Как добавить точки останова Debug в строки, отображаемые в окне «Найти результаты» в Visual Studio
- visual-studio Захватить cout в окне вывода Visual Studio 2005?
- visual-studio Visual Studio продолжает добавлять пустые строки
- visual-studio Visual Studio открывает браузер по умолчанию вместо Internet Explorer
- visual-studio Как остановить отладчик Visual Studio, запускающий мой процесс в объекте задания?
- visual-studio Отключение предупреждений, генерируемых с помощью _CRT_SECURE_NO_DEPRECATE
- visual-studio Заголовок C99 stdint.h и MS Visual Studio
- visual-studio Использование предварительно скомпилированных заголовков с CMake
- visual-studio Как запускать события пост-сборки Visual Studio только для отладочной сборки
- visual-studio Прерывание при изменении значения с помощью отладчика Visual Studio