Wix 使用注册表检测安装的MS Office是32位还是64位

Wix 使用注册表检测安装的MS Office是32位还是64位,wix,registry,ms-office,vsto,add-in,Wix,Registry,Ms Office,Vsto,Add In,我想基于excel版本(32位或64位)安装vsto加载项。 我计划捆绑32位和64位MSI,并通过确定excel版本安装一个。 我可以通过使用注册表找到这个链接来检测2010 office是32位还是64位。 但我想检查Excel2007和2013是32位还是64位。 是否可以通过注册表检测它们。您可以使用产品代码(GUID)来标识Office应用程序的位。有关更多信息,请参阅 您无法从注册表可靠地检测到它(直接调用)。最好是在C#或VB.net中创建自定义安装程序模块,获取应用程序的产品代码

我想基于excel版本(32位或64位)安装vsto加载项。 我计划捆绑32位和64位MSI,并通过确定excel版本安装一个。 我可以通过使用注册表找到这个链接来检测2010 office是32位还是64位。 但我想检查Excel2007和2013是32位还是64位。
是否可以通过注册表检测它们。

您可以使用产品代码(GUID)来标识Office应用程序的位。有关更多信息,请参阅

您无法从注册表可靠地检测到它(直接调用)。最好是在C#或VB.net中创建自定义安装程序模块,获取应用程序的产品代码。从产品代码中,您可以获得比特数

产品代码也可以从注册表中提取,但让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安装不正确,有时产品代码可能为空或错误。

首先,请在此键中查找已安装的Outlook版本:

HKEY\U CLASSES\U ROOT\Outlook.Application\CurVer

该值将为Outlook.Application.15(2013年)。然后解析该值以获取整数并查找该键:

HKEY\U LOCAL\U MACHINE\Software\Wow6432Node\Microsoft\Office\15.0\Outlook


如果存在,请检查位的值以确定它是32位(x86)还是64位(x64)。如果它不存在,则假设它是32位的。

给定:Office32安装在“ProgramFiles(x86)”中,这对我适用

我基本上是检查winword.exe是否在键的下面。如果他们不安装word部件,那么在这一点上很难。我使用它来可变地运行office的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>

你在办公室吗
这不是我的办公室

我想查找office 2013应用程序的bitness。office 2013也可以这样做。