2015-01-12 106 views

回答

3

首先來說一下展望在這個關鍵的安裝版本:

HKEY_CLASSES_ROOT \ Outlook.Application \ CURVER

值將Outlook.Application.15(2013年)。然後分析該值以得到整數和查找此項:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \微軟\辦公室\ 15.0 \ Outlook中

如果它存在,檢查位數的值,以確定它是否是32位(x86)或64位(x64)。如果它不存在,則假定爲32位。

1

無法從註冊表(直接調用)可靠地檢測到它。最好是在C#或VB.net中創建自定義安裝程序模塊,獲取應用程序的ProductCode。從產品代碼,你可以得到Bitness。

產品代碼也從註冊表中獲取,但讓Office應用程序處理它。

Private IsExcel32Bit As Boolean = False 
Private IsExcel64Bit As Boolean = False 
Private ReadOnly STR_prdCodeDelimeter As Char = CChar("-") 

Private Sub GetExcelBitness(ByVal exApp As Microsoft.Office.Interop.Excel.Application) 
    Dim prdCode As String = exApp.ProductCode 
    If Not String.IsNullOrEmpty(prdCode) AndAlso CInt(prdCode.Split(STR_prdCodeDelimeter)(3)(0).ToString) = 0 Then 
     IsExcel32Bit = True 
    ElseIf Not String.IsNullOrEmpty(prdCode) AndAlso CInt(prdCode.Split(STR_prdCodeDelimeter)(3)(0).ToString) = 1 Then 
     IsExcel64Bit = True 
    End If 
End Sub 

順便說一句,兩個安裝程序分開將在未來幫助你。如果MS Office未正確安裝,有時產品代碼可能爲空或錯誤。

3

鑑於:Office32安裝到「Program Files(x86)」中,這對我很有用。

我基本上檢查winword.exe是否在關鍵之下的某處。如果他們不安裝單詞部分,那麼在這一點上很難。我使用它來爲辦公室可變地運行32位或64位msi安裝程序。

<Fragment> 
<Property Id="IS_32BITOFFICE"> 
    <DirectorySearch Path="[ProgramFilesFolder]\Microsoft Office"     
        Depth="4"     
        AssignToProperty="no"     
        Id="IS_32BIT_OFFICE_DIRSEARCH"> 
    <FileSearch Name="winword.exe" /> 
    </DirectorySearch> 
</Property> 

<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"> 
    <Component Id="WIN64_OFFICE32_MSI"> 
    <File Id="WIN64_OFFICE32_MSI" src="WIN64_OFFICE32.txt"/> 
    <Condition>IS_32BITOFFICE</Condition> 
    </Component> 
    <Component Id="WIN64_OFFICE64_MSI"> 
    <File Id="WIN64_OFFICE64_MSI" src="WIN64_OFFICE64.txt"/> 
    <Condition>NOT IS_32BITOFFICE</Condition> 
    </Component> 
    </ComponentGroup> 
</Fragment> 
相關問題