public OfficePathsReturn GetOfficePathList() { var officeKeys = new List<string>() { @"SOFTWARE\Microsoft\Office", @"SOFTWARE\Wow6432Node\Microsoft\Office" }; var clickToRunList = new List<OfficeInstall>(); var pathReturn = new OfficePathsReturn() { ClickToRunList = new List<OfficeInstall>(), VersionList = new List<string>(), PathList = new List<string>(), PackageList = new List<string>(), ClickToRunPathList = new List<string>(), ConfigItemList = new List<string>() }; foreach (var regKey in officeKeys) { var officeVersion = GetRegistrySubKeys(regKey); var c2RRegPath = regKey + @"\ClickToRun\Configuration"; var c2R16Key = GetRegistryKey(c2RRegPath); if (c2R16Key != null) { clickToRunList.Add(new OfficeInstall { InstallPath = GetRegistryValue(c2RRegPath, "InstallationPath"), Bitness = GetRegistryValue(c2RRegPath, "Platform"), ClientCulture = GetRegistryValue(c2RRegPath, "ClientCulture"), ClickToRun = true }); } foreach (var key in officeVersion) { var match = Regex.Match(key, @"\d{2}\.\d"); if (match.Success) { if (!pathReturn.VersionList.Contains(key)) { pathReturn.VersionList.Add(key); } var path = regKey + @"\" + key; var configPath = path + @"\Common\Config"; var configItems = GetRegistrySubKeys(configPath); if (configItems != null) { pathReturn.ConfigItemList.AddRange(from configId in configItems where !string.IsNullOrEmpty(configId) select configId.ToUpper()); } var cltr = new OfficeInstall(); var packagePath = path + @"\Common\InstalledPackages"; var clickToRunPath = path + @"\ClickToRun\Configuration"; var officeLangResourcePath = path + @"\Common\LanguageResources"; var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures); var virtualInstallPath = GetRegistryValue(clickToRunPath, "InstallationPath"); var mainLangId = GetRegistryValue(officeLangResourcePath, "SKULanguage"); if (string.IsNullOrEmpty(mainLangId)) { var mainlangCulture = cultures.FirstOrDefault(c => c.LCID.ToString() == mainLangId); if (mainlangCulture != null) { cltr.ClientCulture = mainlangCulture.Name; } } var officeLangPath = path + @"\Common\LanguageResources\InstalledUIs"; var langValues = GetRegistrySubKeys(officeLangPath); CultureInfo langCulture = null; if (langValues != null) { foreach (var langValue in langValues) { langCulture = cultures.FirstOrDefault(c => c.LCID.ToString() == langValue); } } if (string.IsNullOrEmpty(virtualInstallPath)) { clickToRunPath = regKey + @"\ClickToRun\Configuration"; virtualInstallPath = GetRegistryValue(clickToRunPath, "InstallationPath"); } if (!string.IsNullOrEmpty(virtualInstallPath)) { if (virtualInstallPath == null) virtualInstallPath = ""; if (!pathReturn.ClickToRunPathList.Contains(virtualInstallPath.ToUpper())) { pathReturn.ClickToRunPathList.Add(virtualInstallPath.ToUpper()); } cltr.InstallPath = virtualInstallPath; cltr.Bitness = GetRegistryValue(clickToRunPath, "Platform"); cltr.ClientCulture = GetRegistryValue(clickToRunPath, "ClientCulture"); cltr.ClickToRun = true; clickToRunList.Add(cltr); } var packageItems = GetRegistrySubKeys(packagePath); var officeItems = GetRegistrySubKeys(path); foreach (var itemKey in officeItems) { var itemPath = path + @"\" + itemKey; var installRootPath = itemPath + @"\InstallRoot"; //HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\Common\InstallRoot var filePath = GetRegistryValue(installRootPath, "Path"); if (string.IsNullOrEmpty(filePath)) continue; if (!pathReturn.PathList.Contains(filePath)) { pathReturn.PathList.Add(filePath); } } if (packageItems != null) { foreach (var packageGuid in packageItems) { var packageItemPath = packagePath + @"\" + packageGuid; var packageName = GetRegistryValue(packageItemPath, null); if (!pathReturn.PackageList.Contains(packageName)) { if (!string.IsNullOrEmpty(packageName)) { pathReturn.PackageList.Add(packageName.Replace(" ", "").ToLower()); } } } } } } } return pathReturn; }
public OfficePathsReturn GetOfficePathList() { var officeKeys = new List <string>() { @"SOFTWARE\Microsoft\Office", @"SOFTWARE\Wow6432Node\Microsoft\Office" }; var clickToRunList = new List <OfficeInstall>(); var pathReturn = new OfficePathsReturn() { ClickToRunList = new List <OfficeInstall>(), VersionList = new List <string>(), PathList = new List <string>(), PackageList = new List <string>(), ClickToRunPathList = new List <string>(), ConfigItemList = new List <string>() }; foreach (var regKey in officeKeys) { var officeVersion = GetRegistrySubKeys(regKey); var c2RRegPath = regKey + @"\ClickToRun\Configuration"; var c2R16Key = GetRegistryKey(c2RRegPath); if (c2R16Key != null) { clickToRunList.Add(new OfficeInstall { InstallPath = GetRegistryValue(c2RRegPath, "InstallationPath"), Bitness = GetRegistryValue(c2RRegPath, "Platform"), ClientCulture = GetRegistryValue(c2RRegPath, "ClientCulture"), ClickToRun = true }); } foreach (var key in officeVersion) { var match = Regex.Match(key, @"\d{2}\.\d"); if (match.Success) { if (!pathReturn.VersionList.Contains(key)) { pathReturn.VersionList.Add(key); } var path = regKey + @"\" + key; var configPath = path + @"\Common\Config"; var configKey = Registry.LocalMachine.OpenSubKey(configPath); var configItems = configKey?.GetSubKeyNames(); if (configItems != null) { pathReturn.ConfigItemList.AddRange(from configId in configItems where !string.IsNullOrEmpty(configId) select configId.ToUpper()); } var cltr = new OfficeInstall(); var packagePath = path + @"\Common\InstalledPackages"; var clickToRunPath = path + @"\ClickToRun\Configuration"; var officeLangResourcePath = path + @"\Common\LanguageResources"; var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures); var virtualInstallPath = GetRegistryValue(clickToRunPath, "InstallationPath")?.ToString(); var mainLangId = GetRegistryValue(officeLangResourcePath, "SKULanguage")?.ToString(); if (string.IsNullOrEmpty(mainLangId)) { var mainlangCulture = cultures.FirstOrDefault(c => c.LCID.ToString() == mainLangId); if (mainlangCulture != null) { cltr.ClientCulture = mainlangCulture.Name; } } var officeLangPath = path + @"\Common\LanguageResources\InstalledUIs"; var offLangPathKey = Registry.LocalMachine.OpenSubKey(officeLangPath); var langValues = offLangPathKey?.GetSubKeyNames(); CultureInfo langCulture = null; if (langValues != null) { foreach (var langValue in langValues) { langCulture = cultures.FirstOrDefault(c => c.LCID.ToString() == langValue); } } if (string.IsNullOrEmpty(virtualInstallPath)) { clickToRunPath = regKey + @"\ClickToRun\Configuration"; virtualInstallPath = GetRegistryValue(clickToRunPath, "InstallationPath"); } if (!string.IsNullOrEmpty(virtualInstallPath)) { if (!pathReturn.ClickToRunPathList.Contains(virtualInstallPath?.ToUpper())) { pathReturn.ClickToRunPathList.Add(virtualInstallPath?.ToUpper()); } cltr.InstallPath = virtualInstallPath; cltr.Bitness = GetRegistryValue(clickToRunPath, "Platform"); cltr.ClientCulture = GetRegistryValue(clickToRunPath, "ClientCulture"); cltr.ClickToRun = true; clickToRunList.Add(cltr); } var packageItems = Registry.LocalMachine.OpenSubKey(packagePath)?.GetSubKeyNames(); var officeItems = Registry.LocalMachine.OpenSubKey(path)?.GetSubKeyNames(); foreach (var itemKey in officeItems) { var itemPath = path + @"\" + itemKey; var installRootPath = itemPath + @"\InstallRoot"; //HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\Common\InstallRoot var filePath = GetRegistryValue(installRootPath, "Path"); if (string.IsNullOrEmpty(filePath)) { continue; } if (!pathReturn.PathList.Contains(filePath)) { pathReturn.PathList.Add(filePath); } } if (packageItems != null) { foreach (var packageGuid in packageItems) { var packageItemPath = packagePath + @"\" + packageGuid; var packageName = Registry.LocalMachine.OpenSubKey(packageItemPath)?.GetValue(null)?.ToString(); if (!pathReturn.PackageList.Contains(packageName)) { if (!string.IsNullOrEmpty(packageName)) { pathReturn.PackageList.Add(packageName.Replace(" ", "").ToLower()); } } } } } } } return(pathReturn); }