我正在使用x86和x32版本开发Excel插件,并且在我的Wix安装程序中,如果用户尝试在x64版本的Excel 2013上安装x86版本的插件,我想引发错误,反之亦然。我是这样做的:
来自x86插件.wxs文件的片段:
<!-- Check if Excel x86 is installed -->
<Property Id="EXCEL2013">
<ComponentSearch Id="DetectExcel2013" Guid="{C8A65ABE-3270-4FD7-B854-50C8082C8F39}" Type="file"/>
</Property>
<Condition Message="Please install Excel 2013x86.">
<![CDATA[Installed OR EXCEL2013]]>
</Condition>
snnipet来自x64插件.wxs文件:
<!-- Check if Excel x64 is installed -->
<Property Id="EXCEL2013">
<ComponentSearch Id="DetectExcel2013" Guid="{E3BD1151-B9CA-4D45-A77E-51A6E0ED322A}" Type="file"/>
</Property>
<Condition Message="Please install Excel 2013x64.">
<![CDATA[EXCEL2013]]>
</Condition>
我在https://social.msdn.microsoft.com/Forums/vstudio/en-US/bdcd8850-0b6a-4fd1-a0cb-647ff12c3088/finding-the-component-id-for-office-2013?forum=vsto找到了这个Guids,看起来很可靠。 但是有问题。这个检查就像x86 Excel机器上的魅力一样 - C8A65ABE ... guid就在那里找到了。但对于E3BD1151而言,情况并非如此......在x64 Excel机器上的指南。似乎两个版本的Excel(x86和x64)具有相同的C8A65ABE ... guid。如何可靠地区分Excel 2013版本,因为两个版本都有相同的C8A65ABE ... guid?
答案 0 :(得分:1)
如果您同时支持x86和x64系统,则需要两个MSI文件。
一个将是x86 MSI并搜索x86 Excel(并注意这些guids用于PIA)并且仅包含x86插件。此MSI需要启动条件,以防止它在x64系统上安装,因为您有一个单独的MSI。您的情况可能类似于-not VersionNT64-
另一个将是x64 MSI,它将同时具有x64和x86版本的插件。这是因为Microsoft似乎建议在x64系统上使用x86 Office,因此大多数情况下x64系统将具有x86 Office和x86 PIA,这就是您在x64系统上检测它的原因。我认为你假设x64系统必须有x64 Office,但事实并非如此。 x86应用程序在x64系统上运行良好。
所以我怀疑实际上这些搜索都没问题 - 你说搜索在x64机器上不起作用,但我的猜测是它上面有x86 Office。您需要在明确安装了x64 Office的系统上进行测试,我认为这比您想象的要少。在x64系统上,您将激活x86或x64插件,具体取决于组件搜索告诉您Office的位数,大多数情况下它可能是x86版本。