我正在使用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 Office\Office15\OUTLOOK.EXE"/>
<PackageGroup Id="MyInstallx64">
<MsiPackage
SourceFile="MyInstallx64.msi"
InstallCondition="ProcessorArchitecture = 9 AND Outlook2013Exists = true" Visible="yes" >
</MsiPackage>
</PackageGroup>
</Fragment>
</Wix>
我在InstallCondition中放置了什么,以便msi仅在此文件存在时才安装?我试过&#34; Outlook2013Exists = true&#34;但这不起作用。
答案 0 :(得分:1)
您可能不应该根据文件搜索执行installCondition。可能会出现一些问题,
installCondition的最佳选择是检查注册表项。通常所有注册表项将位于相同的路径HKLM \ SOFTWARE \ Microsoft \ Office \ 15.0 \ Common \ ProductVersion中,并检查HKLM \ SOFTWARE \ Microsoft \ Office \ 15.0 \ Outlook是否存在
以此为例,你可以做到
<util:RegistrySearch
Id="Office15Installed_x64"
Win64="yes"
Root="HKLM"
Key="SOFTWARE\Microsoft\Office\15.0\Common"
Value="ProductVersion"
Result="value"
Variable="Office15Installed_x64" />
<util:RegistrySearch
Id="Outlook15Bitness_x64"
Win64="yes"
Root="HKLM"
Key="SOFTWARE\Microsoft\Office\15.0\Outlook"
Value="Bitness"
Result="value"
Variable="Outlook15Bitness_x64" />
您还可以在&#34; Common \ InstallRoot&#34;
中找到安装路径然后你会使用像这样的安装条件
InstallCondition="Office15Installed_x64 AND Outlook15Bitness_x64 ~= "x64""
我现在只在我的计算机上安装了32位,因此您必须查看安装了Outlook 64位的计算机的注册表才能查看要使用的正确值。
<小时/>
如果要将文件搜索结果用作安装条件,则只需使用
InstallCondition="ProcessorArchitecture = 9 AND Outlook2013Exists"
IIRC,文件搜索会创建一个属性,并根据是否找到该文件将其设置为1或0。在一个条件中,1被视为真理,0是假。
此外,请在运行后查看引导程序日志。这非常有用,因为它可以显示属性值和安装条件的评估结果。
答案 1 :(得分:0)
使用WiX util组件ID搜索可能会更好,例如在这个问题中:
What Component IDs should I search for to detect whether the Office 2010 PIA's are Installed
其中也引用了其他Office版本。这篇文章也是这样的:
在不知道您的MSI产品的作用的情况下,您可能需要担心64位和32位版本的Office,因此文件位置可能是ProgramFiles或ProgramFiles(x86),具体取决于版本并假设它为&#39 ; s首先安装在那里。如果要安装加载项,则可能需要为Office的两个版本提供支持。