我正在使用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或更早的版本。
- 未安装在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 ~= "x64""
我现在的机器上只安装了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版本。