【问题标题】:WiX installer - how can I check for .net framework 3.5 and 4.6 with Wix 3.10WiX 安装程序 - 如何使用 Wix 3.10 检查 .net framework 3.5 和 4.6
【发布时间】:2018-08-23 22:04:19
【问题描述】:

我要求只有在安装了 Framework 4.6 时才允许 WiX 安装程序安装产品。如果不是这种情况,我会向用户显示一条错误消息。

这工作正常,但现在我必须验证是否有以前的版本在 framework 3.5 中运行,我必须让用户知道需要 Framework 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>

但安装程序所做的只是显示熟悉的“安装向导提前结束”

【问题讨论】:

  • 嗯,作为第一步,我会禁用所有自定义操作并重新编译和测试,和/或enable verbose logging 以确定失败的原因。我总是喜欢建议设置开发人员通过使用链接内容中“Globally for all setups on a machine”下的过程来启用自动日志记录(您可能已经这样做了)。然后,当您需要时,%TEMP% 文件夹中总会有一个可用的日志。按修改排序以查找最新日志。
  • 好主意...会尝试...

标签: wix .net-framework-version wix3.10


【解决方案1】:

我可能对您的方案有些不理解,但第一个条件不是同时满足这两种情况吗?您只需要安装 .NET 4.6?只有在安装了 3.5 并且 未安装 4.6 时,第二个条件现在才出现。所以我假设如果安装了两个版本,安装程序将不会启动 - 我不确定这些版本是否可以共存?我永远无法跟踪可以同时安装哪些 .NET 版本,以及它们共享哪些 CLR。我认为是 Windows 7 附带的 3.5 版本? Some details.

我在您的问题中没有看到任何自定义操作 WiX 标记,所以我真的不能说什么 CustomAction.config。托管代码自定义操作不是我的专长。

【讨论】:

  • 第二段代码是我尝试安装的产品的 CustomAction.config 中的代码。
【解决方案2】:

你的两个发射条件相互抵消。

如果找到 .Net framework 4.6 或更高版本,则允许安装。 其他仅在找到 .Net Framework 3.5 且未找到 .Net Framework 4.6 时才允许安装。

您的第二个条件没有“Installed OR”属性,这确保卸载不会因为启动条件而失败。

自定义动作配置只影响自定义动作项目,你的启动条件不受它的影响。

编辑:除非您的启动条件正在使用由用户定义的自定义操作创建的某些属性。

【讨论】:

  • 那么语法就关闭了......我该如何解决它?如果操作系统有框架 3.5 但没有 4.6,我必须显示条件消息并阻止安装。如果它有 3.5 和 4.0 或 4.5 但没有 4.6,那么我还必须显示条件消息并阻止安装....如何修复代码?
  • 我会说你需要一些测试虚拟来验证,然后你保持单一条件来检查 4.6 - 这就是你需要的?这应该可以工作,前提是 WIX_IS_NETFRAMEWORK_46_OR_LATER_INSTALLED 属性只有在 4.6 存在时才真正设置。
猜你喜欢
  • 2017-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-14
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多