我们已经写了PowerShellfunction来查找是否安装了64位或32位msi。 我们正在检查Outlookregistry项,因为这是一个位信息。
但是,当用户只安装excel没有outlook,这个registry项是不可靠的(在64位操作系统它是可用的,但在32位操作系统是不可用的)。
以下是我们写的function。 现在,因为registry项不可用,所以不起作用。 有什么其他方法可以findexcel的位?
Function Get-OfficeVersionInstalled { $NoExcelInstalled = '0' $excelApplicationRegKey = "HKLM:\SOFTWARE\Classes\Excel.Application\CurVer" if( Test-Path $excelApplicationRegKey) { $excelApplicationCurrentVersion = (Get-ItemProperty $excelApplicationRegKey).'(default)' #Get version number alone from registry value $($excelApplicationCurrentVersion -replace "Excel.Application.","") } else { $NoExcelInstalled } } Function Test-Excel2013AndAbove { Param ( [ValidateSet("x64", "x86")] $Edition="x64" ) $isExpectedEditionInstalled = $false $officeVersion = Get-OfficeVersionInstalled $office2013Version = 15 if( $officeVersion -ge $office2013Version) { # In registry, version will be with decimal $officeVersion = $officeVersion+".0" # Outlook key is having bitness which will decide the edition. # Even if outlook is not installed this key will be present. # This is the only place where we can reliably find the edition of Excel $OutlookKey = "HKLM:\SOFTWARE\Microsoft\Office\$officeVersion\Outlook" $OutlookWow6432NodeKey = "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Office\$officeVersion\Outlook" if(Test-Path $OutlookKey) { $officeRegKey = $OutlookKey } else { $officeRegKey = $OutlookWow6432NodeKey } $BitNess = (Get-ItemProperty $officeRegKey).BitNess if($BitNess -eq $Edition) { $isExpectedEditionInstalled = $true } else { $isExpectedEditionInstalled = $false } } return $isExpectedEditionInstalled }
您不能在没有模拟器的情况下在32位版本的Windows上运行64位软件(在32位计算机上是否有任何执行64位程序的方法? )。 这意味着如果你检测到一个32位的操作系统,任何本地,非模拟安装的Excel(如果有的话)将是32位。
所以这里有一些伪代码来做到这一点:
if (OS.BitSize == 32) { Check if Excel installed. If so, then it is 32 bit. } else { //64 bit OS Check registry key to determine whether 32 or 64 bit Excel is installed. }