WIX:如何在安装条件下使用文件搜索结果



我正在使用WIX创建一个包。我使用util:FileSearch来检查文件是否存在,如果该文件存在,我想安装MsiPackage。我还检查了工作的处理器架构。

这是Bundle.wxs:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
    <Bundle Name="My_Setup_2" Version="1.0.0.0" Manufacturer="ABC" UpgradeCode="3945a604-d6ae-4334-8a5b-1e9e2f222e08">
        <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
        <Chain>
            <PackageGroupRef Id="MyInstallx64"/>
        </Chain>
    </Bundle>
  <Fragment>
    <util:FileSearch Id="Outlook2013Search"
                     Variable="Outlook2013Exists"
                     Result="exists"
                     Path="[ProgramFilesFolder]Microsoft OfficeOffice15OUTLOOK.EXE"/>
    <PackageGroup Id="MyInstallx64">
      <MsiPackage
        SourceFile="MyInstallx64.msi"
        InstallCondition="ProcessorArchitecture = 9 AND Outlook2013Exists = true" Visible="yes" >
      </MsiPackage>
    </PackageGroup>
  </Fragment>
</Wix>

我在InstallCondition中放入什么以便msi只在该文件存在时安装?我尝试了"Outlook2013Exists = true",但这不起作用。

您可能不应该基于文件搜索执行installCondition。由此可能产生的一些问题

    不是正确的版本。也许这不是一个特定产品的问题,但可能是其他产品。也许13.4+版本支持你的产品,但不支持13.3或更早的版本。
  1. 未安装在C:Program Files中!这是更可能出现的情况。该产品不需要安装在程序文件中,甚至不需要安装在C: drive.

installCondition的最佳选择是检查注册表项。一般来说,所有的注册表项将在相同的路径HKLMSOFTWAREMicrosoftOffice15.0CommonProductVersion,并检查HKLMSOFTWAREMicrosoftOffice15.0Outlook是否存在

例如,你可以输入

<util:RegistrySearch
  Id="Office15Installed_x64"
  Win64="yes"
  Root="HKLM"
  Key="SOFTWAREMicrosoftOffice15.0Common"
  Value="ProductVersion"
  Result="value"
  Variable="Office15Installed_x64" />
<util:RegistrySearch
  Id="Outlook15Bitness_x64"
  Win64="yes"
  Root="HKLM"
  Key="SOFTWAREMicrosoftOffice15.0Outlook"
  Value="Bitness"
  Result="value"
  Variable="Outlook15Bitness_x64" />

您也可以在"CommonInstallRoot"

中找到安装路径。

那么您将使用如下的安装条件

InstallCondition="Office15Installed_x64 AND Outlook15Bitness_x64 ~= &quot;x64&quot;"

我现在的机器上只安装了32位,所以你必须检查安装了64位Outlook的机器的注册表,以查看要使用的正确值。

<人力资源 />

如果你想使用文件搜索结果作为安装条件,你只需要使用

InstallCondition="ProcessorArchitecture = 9 AND Outlook2013Exists"

IIRC,文件搜索创建一个属性,并根据是否找到文件将其设置为1或0。在一个条件中,1被视为真,0被视为假。

另外,在运行后查看引导程序日志。这是非常有用的,因为它可以显示属性值和安装条件的评估结果。

您最好使用WiX util组件id搜索,例如在这个问题中:

我应该搜索哪些组件id来检测Office 2010 PIA's是否已安装

也有对其他Office版本的引用。还有这个帖子:

https://social.msdn.microsoft.com/forums/vstudio/en us/bdcd8850 - 0 - b6a 4 - fd1 a0cb - 647 - ff12c3088/finding - -组件id - - - - - - -办公室- 2013 ?forum=vsto

如果你不知道你的MSI产品是做什么的,你可能需要担心有64和32位版本的Office,所以文件位置可能是ProgramFiles或ProgramFiles(x86),这取决于版本,并假设它首先安装在那里。如果您正在安装加载项,则可能需要同时支持Office的两个bit版本。

相关内容