我正在尝试检测在安装应用程序之前是否在客户端计算机上安装.Net框架。如果我没有包含安装文件,请执行它。
我的chain
中有以下代码:
<ExePackage Id="Net45" Name="Microsoft .NET Framework 4.5.1 Setup" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes"
SourceFile="F:\Net Framework Install.exe"
InstallCondition="NOT(Installed OR NETFRAMEWORK45)" />
我还宣布了以下片段:
<Fragment Id="InstallConditionChecks">
<PropertyRef Id="NETFRAMEWORK45"/>
</Fragment>
最后,我相信我正在引用检测.net安装所需的所有正确的wix库:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
问题是即使我有一台肯定安装了.Net framework 4.5的测试机器,安装程序仍会尝试安装它(导致.net安装程序尝试修复安装)。
我在这里做错了吗?
答案 0 :(得分:2)
这里有两个问题。主要问题是PropertyRef
适用于MSI,而不是捆绑。您需要使用RegistrySearchRef
。另一个问题是您将检测逻辑放在InstallCondition
中,但属于DetectCondition
。移除InstallCondition
并使用与NetFx扩展程序使用的DetectCondition
相同的<?define NetFx451MinRelease = 378675 ?>
<util:RegistrySearchRef Id="NETFRAMEWORK45" />
<ExePackage DetectCondition="NETFRAMEWORK45 >= $(var.NetFx451MinRelease)" />
:https://github.com/wixtoolset/wix3/blob/develop/src/ext/NetFxExtension/wixlib/NetFx451.wxs
{{1}}
答案 1 :(得分:0)
您没有检查目标机器的注册表以查找您正在寻找的目标框架,看看本教程,它将向您展示如何检测Net Framework(RegistrySearch),甚至展示如何使其工作对于Win32或Win64。
教程here