【发布时间】: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