public OfficeInstalledProducts GetOfficeVersion() { var installKeys = new List<string>() { @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" }; var officeKeys = new List<string>() { @"SOFTWARE\Microsoft\Office", @"SOFTWARE\Wow6432Node\Microsoft\Office" }; string osArchitecture = null; var osClass = new ManagementClass("Win32_OperatingSystem"); foreach (var queryObj in osClass.GetInstances()) { foreach (var prop in queryObj.Properties) { if (prop.Name == null) continue; if (prop.Name.ToLower() == "OSArchitecture".ToLower()) { if (prop.Value == null) continue; osArchitecture = prop.Value.ToString() ?? ""; break; } } } // $results = new-object PSObject[] 0; // foreach ($computer in $ComputerName) { // if ($Credentials) { // $os=Get-WMIObject win32_operatingsystem -computername $computer -Credential $Credentials // } else { // $os=Get-WMIObject win32_operatingsystem -computername $computer // } // $osArchitecture = $os.OSArchitecture // if ($Credentials) { // $regProv = Get-Wmiobject -list "StdRegProv" -namespace root\default -computername $computer -Credential $Credentials //} else { // $regProv = Get-Wmiobject -list "StdRegProv" -namespace root\default -computername $computer //} var officePathReturn = GetOfficePathList(); foreach (var regKey in installKeys) { var keyList = new List<string>(); var keys = GetRegistrySubKeys(regKey); foreach (var key in keys) { var path = regKey + @"\" + key; var installPath = GetRegistryValue(path, "InstallLocation"); if (string.IsNullOrEmpty(installPath)) { continue; } var buildType = "64-Bit"; if (osArchitecture == "32-bit") { buildType = "32-Bit"; } if (regKey.ToUpper().Contains("Wow6432Node".ToUpper())) { buildType = "32-Bit"; } if (Regex.Match(key, "{.{8}-.{4}-.{4}-1000-0000000FF1CE}").Success) { buildType = "64-Bit"; } if (Regex.Match(key, "{.{8}-.{4}-.{4}-0000-0000000FF1CE}").Success) { buildType = "64-Bit"; } var modifyPath = GetRegistryValue(path, "ModifyPath"); if (!string.IsNullOrEmpty(modifyPath)) { if (modifyPath.ToLower().Contains("platform=x86")) { buildType = "32-Bit"; } if (modifyPath.ToLower().Contains("platform=x64")) { buildType = "64-Bit"; } } var officeProduct = false; foreach (var officeInstallPath in officePathReturn.PathList) { if (!string.IsNullOrEmpty(officeInstallPath)) { var installReg = "^" + installPath.Replace(@"\", @"\\"); installReg = installReg.Replace("(", @"\("); installReg = installReg.Replace(@")", @"\)"); if (Regex.Match(officeInstallPath, installReg).Success) { officeProduct = true; } } } if (!officeProduct) { continue; } var name = GetRegistryValue(path, "DisplayName"); if (name == null) name = ""; if (officePathReturn.ConfigItemList.Contains(key.ToUpper()) && name.ToUpper().Contains("MICROSOFT OFFICE")) { //primaryOfficeProduct = true; } var version = GetRegistryValue(path, "DisplayVersion"); modifyPath = GetRegistryValue(path, "ModifyPath"); var clientCulture = ""; if (installPath == null) installPath = ""; var clickToRun = false; if (officePathReturn.ClickToRunPathList.Contains(installPath.ToUpper())) { clickToRun = true; if (name.ToUpper().Contains("MICROSOFT OFFICE")) { //primaryOfficeProduct = true; } foreach (var cltr in officePathReturn.ClickToRunList) { if (!string.IsNullOrEmpty(cltr.InstallPath)) { if (cltr.InstallPath.ToUpper() == installPath.ToUpper()) { if (cltr.Bitness == "x64") { buildType = "64-Bit"; } if (cltr.Bitness == "x86") { buildType = "32-Bit"; } clientCulture = cltr.ClientCulture; } } } } var offInstall = new OfficeInstall { DisplayName = name, Version = version, InstallPath = installPath, ClickToRun = clickToRun, Bitness = buildType, ClientCulture = clientCulture }; officePathReturn.ClickToRunList.Add(offInstall); //} } } var returnList = officePathReturn.ClickToRunList.Distinct().ToList(); return new OfficeInstalledProducts() { OfficeInstalls = returnList, OSArchitecture = osArchitecture }; }
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); }
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 OfficeInstalledProducts GetOfficeVersion() { var installKeys = new List <string>() { @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" }; var officeKeys = new List <string>() { @"SOFTWARE\Microsoft\Office", @"SOFTWARE\Wow6432Node\Microsoft\Office" }; string osArchitecture = null; var osClass = new ManagementClass("Win32_OperatingSystem"); foreach (var queryObj in osClass.GetInstances()) { foreach (var prop in queryObj.Properties) { if (prop.Name?.ToLower() == "OSArchitecture".ToLower()) { osArchitecture = prop.Value?.ToString(); if (osArchitecture == null) { osArchitecture = ""; } } } } // $results = new-object PSObject[] 0; // foreach ($computer in $ComputerName) { // if ($Credentials) { // $os=Get-WMIObject win32_operatingsystem -computername $computer -Credential $Credentials // } else { // $os=Get-WMIObject win32_operatingsystem -computername $computer // } // $osArchitecture = $os.OSArchitecture // if ($Credentials) { // $regProv = Get-Wmiobject -list "StdRegProv" -namespace root\default -computername $computer -Credential $Credentials //} else { // $regProv = Get-Wmiobject -list "StdRegProv" -namespace root\default -computername $computer //} var officePathReturn = GetOfficePathList(); foreach (var regKey in installKeys) { var keyList = new List <string>(); var keys = Registry.LocalMachine.OpenSubKey(regKey)?.GetSubKeyNames(); foreach (var key in keys) { var path = regKey + @"\" + key; var installPath = Registry.LocalMachine.OpenSubKey(path)?.GetValue("InstallLocation")?.ToString(); if (string.IsNullOrEmpty(installPath)) { continue; } var buildType = "64-Bit"; if (osArchitecture == "32-bit") { buildType = "32-Bit"; } if (regKey.ToUpper().Contains("Wow6432Node".ToUpper())) { buildType = "32-Bit"; } if (Regex.Match(key, "{.{8}-.{4}-.{4}-1000-0000000FF1CE}").Success) { buildType = "64-Bit"; } if (Regex.Match(key, "{.{8}-.{4}-.{4}-0000-0000000FF1CE}").Success) { buildType = "64-Bit"; } var modifyPath = Registry.LocalMachine.OpenSubKey(path)?.GetValue("ModifyPath")?.ToString(); if (!string.IsNullOrEmpty(modifyPath)) { if (modifyPath.ToLower().Contains("platform=x86")) { buildType = "32-Bit"; } if (modifyPath.ToLower().Contains("platform=x64")) { buildType = "64-Bit"; } } var primaryOfficeProduct = false; var officeProduct = false; foreach (var officeInstallPath in officePathReturn.PathList) { if (!string.IsNullOrEmpty(officeInstallPath)) { var installReg = "^" + installPath.Replace(@"\", @"\\"); installReg = installReg.Replace("(", @"\("); installReg = installReg.Replace(@")", @"\)"); if (Regex.Match(officeInstallPath, installReg).Success) { officeProduct = true; } } } if (!officeProduct) { continue; } var name = Registry.LocalMachine.OpenSubKey(path)?.GetValue("DisplayName")?.ToString(); if (name == null) { name = ""; } if (officePathReturn.ConfigItemList.Contains(key.ToUpper()) && name.ToUpper().Contains("MICROSOFT OFFICE")) { primaryOfficeProduct = true; } var version = Registry.LocalMachine.OpenSubKey(path)?.GetValue("DisplayVersion")?.ToString(); modifyPath = Registry.LocalMachine.OpenSubKey(path)?.GetValue("ModifyPath")?.ToString(); var cltrUpdatedEnabled = ""; var cltrUpdateUrl = ""; var clientCulture = ""; var clickToRun = false; if (officePathReturn.ClickToRunPathList.Contains(installPath?.ToUpper())) { clickToRun = true; if (name.ToUpper().Contains("MICROSOFT OFFICE")) { primaryOfficeProduct = true; } foreach (var cltr in officePathReturn.ClickToRunList) { if (!string.IsNullOrEmpty(cltr.InstallPath)) { if (cltr.InstallPath.ToUpper() == installPath.ToUpper()) { if (cltr.Bitness == "x64") { buildType = "64-Bit"; } if (cltr.Bitness == "x86") { buildType = "32-Bit"; } clientCulture = cltr.ClientCulture; } } } } var offInstall = new OfficeInstall { DisplayName = name, Version = version, InstallPath = installPath, ClickToRun = clickToRun, Bitness = buildType, ClientCulture = clientCulture }; officePathReturn.ClickToRunList.Add(offInstall); //} } } var returnList = officePathReturn.ClickToRunList.Distinct().ToList(); return(new OfficeInstalledProducts() { OfficeInstalls = returnList, OSArchitecture = osArchitecture }); }