【问题标题】:Wix installer - Can I execute launch conditions by parts?Wix 安装程序 - 我可以按部分执行启动条件吗?
【发布时间】:2018-08-27 17:30:08
【问题描述】:

我使用的是 WiX 3.10。我有一个特定的场景,其中在启动条件之前发生了一些自定义操作,因为在启动条件期间,我评估在这些自定义操作期间设置的某些属性。但是,在启动条件下,我还必须检查 .Net 框架的版本。问题是,如果我没有所需的 .Net Framework,自定义操作会在达到启动条件之前执行,并且不会向用户显示消息。

我可以按特定顺序执行启动条件,还是必须更改自定义操作才能在启动条件后执行?我需要帮助。不是 WiX 专家。

参考代码:

<!--Need to execute this first-->
    <PropertyRef Id="NETFRAMEWORK35" />
      <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 (NETFRAMEWORK35 = "#1" AND WIX_IS_NETFRAMEWORK_46_OR_LATER_INSTALLED)]]>
      </Condition>

<!--Need to execute this second.  It is execute first through custom action-->
      <PropertyRef Id="SQLSERVERMISSINGREQUIREDSERVICES"/>
      <Condition Message="Please install the following SQL Server services for the SQL Server instance: [SQLSERVERMISSINGREQUIREDSERVICES]. Then run this installer again.">
        <![CDATA[Installed or NOT SQLSERVERMISSINGREQUIREDSERVICES]]>
      </Condition>

<!--Need to execute this third. It is execute second through custom action-->
      <PropertyRef Id="SQLSERVERMAJORVERSION"/>
      <PropertyRef Id="SQLSERVERMINORVERSION" />
      <Condition Message="The GSL server requires a 2008 R2, 2012, or 2014 instance named 'GSLSQL' to be installed on the local server.">
        <![CDATA[Installed OR (SQLSERVERMAJORVERSION = "#10" AND SQLSERVERMINORVERSION >= "#50") OR SQLSERVERMAJORVERSION = "#11" OR SQLSERVERMAJORVERSION = "#12"]]>
      </Condition>

【问题讨论】:

  • 自定义操作是托管代码吗? (。网)。我没有测试,但上述情况似乎需要安装 .NET 3.5,否则安装失败 - 即使存在 .NET 4.6。所以这意味着必须安装 .NET 3.5 和 .NET 4.6 才能使用您的应用程序?这个可以吗?如果 Phil 的建议对您不起作用,那么您可能必须使用 C++ 或 ActiveScript 自定义操作来实现自定义检查 - 以避免在缺少 .NET 框架时失败。
  • 自定义操作在启动条件之前执行。它们位于一个单独的 DLL 中,该 DLL 作为安装程序项目中的参考。所以,我怀疑当安装程序被执行,并且目标机器没有安装.Net Framework时,DLL无法加载并导致安装程序提前结束。
  • 是的,因此我提到了 C++ 和 ActiveScripting(VBScript、JavaScript)自定义操作。它们通常会在所有情况下运行,尽管脚本操作不受欢迎。当他们没有进行系统更改并且只进行检查时,我会容忍他们——特别是为了避免 .NET 运行时依赖。您需要对此类脚本自定义操作进行大量测试、错误控制和错误抑制,以免造成问题。
  • 谢谢...截至今天,客户更改了我的任务要求...所以现在我必须将 .Net Framework 与安装捆绑在一起。
  • 非常常见的需求。恕我直言,捆绑 .NET 框架越来越不明智 - 因为现在通过 Windows 更新安装带有修补程序的整个运行时,所以它很快就会过时 - 通常。 A little rant about outdated prerequisites can be found here(底部 - “首选下载”)。但只需实现客户的要求 - 显然。

标签: wix windows-installer wix3.10 wix3.11


【解决方案1】:

按照 LaunchCondition 文档中的建议,对此类条件进行排序的一般方法是将启动条件替换为 19 类自定义操作。这与描述错误的错误表中的错误消息一起使用,并且 CA 本身以属性值为条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 2019-01-27
    相关资源
    最近更新 更多