仅在安装了Framework 4.6的情况下,我才允许WiX安装程序安装该产品。如果不是这种情况,我会向用户显示错误消息。
这可以正常工作,但是现在我必须验证如果框架3.5中运行了以前的版本,则必须让用户知道需要框架4.6。我的方法以某种方式不起作用。希望能有所帮助。这是我在WiX中使用的代码:
<PropertyRef Id="WIX_IS_NETFRAMEWORK_46_OR_LATER_INSTALLED" />
<Condition Message="This application requires .NET Framework 4.6. Please install the .NET Framework then run this installer again.">
<![CDATA[Installed OR WIX_IS_NETFRAMEWORK_46_OR_LATER_INSTALLED]]>
</Condition>
<PropertyRef Id="NETFRAMEWORK35" />
<Condition Message="This application requires .NET Framework 4.6. Please install the .NET Framework then run this installer again.">
<![CDATA[(NETFRAMEWORK35 AND NOT WIX_IS_NETFRAMEWORK_46_OR_LATER_INSTALLED)]]>
</Condition>
在CustomAction.config中,我有:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" />
<supportedRuntime version="v2.0.50727"/>
</startup>
更新
将启动条件更改为:
<Condition Message="This application requires .NET Framework 4.6. Please install the .NET Framework then run this installer again.">
<![CDATA[(Installed OR (NETFRAMEWORK35 = "#1" AND WIX_IS_NETFRAMEWORK_46_OR_LATER_INSTALLED))]]>
</Condition>
但是安装程序所做的只是显示熟悉的“安装向导过早终止”
答案 0 :(得分:0)
对于您的情况,我可能不了解,但是这两种情况的第一个条件都不能满足吗?您只需要安装.NET 4.6?现在,仅当安装了并且未安装4.6时,第二个条件才成立。因此,我假设如果同时安装了两个版本,则安装程序将无法启动-并且不确定这些版本是否可以共存?我永远无法跟踪可以同时安装哪些.NET版本以及它们共享的CLR。我认为Windows 7附带了3.5版本吗? Some details。
我在您的问题中没有看到任何自定义操作WiX标记,因此我无法真正地说出关于该 CustomAction.config
的任何内容。托管代码自定义操作不是我的专长。
答案 1 :(得分:0)
您的两种发射条件都在相互抵消。
如果找到.Net framework 4.6或更高版本,则允许安装。 另一种是仅在找到.Net Framework 3.5而未找到.Net Framework 4.6时才允许安装。
您的第二个条件没有“ 已安装或”属性,可确保卸载不会因为启动条件而失败。
“自定义操作配置”仅影响自定义操作项目,启动条件不受它影响。
编辑:除非您的启动条件正在使用由用户定义的自定义操作创建的某些属性。