Метод регистрации
Я рекомендую запросить реестр для получения этой информации. Это дает фактический каталог установки без необходимости сочетания путей, и это работает и для экспресс-выпусков. Это может быть важным отличием в зависимости от того, что вам нужно сделать (например, шаблоны устанавливаются в разные каталоги в зависимости от выпуска Visual Studio). Расположение реестра следующее (обратите внимание, что Visual Studio является 32-разрядной программой и будет установлена в 32-разрядном разделе реестра на компьютерах x64):
- Visual Studio: HKLM \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ 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 \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ 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"));
}