【问题标题】:Confused with meaning of the CostFinalize action对 CostFinalize 操作的含义感到困惑
【发布时间】:2015-07-27 16:18:31
【问题描述】:

我希望在用户查看和修改要安装的功能之后执行我的自定义操作,但在执行安装之前执行。

我试图在 PublishProduct 之前调用我的操作(在我看来这是正确的点),但我收到了来自 WiX 的链接错误。

<InstallUISequence>
    <Custom Action="ModifyConfigBeforeStartService" Before="PublishProduct"/>
</InstallUISequence>

错误是:

error LGHT0094: Unresolved reference to symbol 'WixAction:InstallUISequence/PublishProduct' in section 'Product:*'

然后我尝试在 CostFinalize 之后调用我的操作。 来自documentation:

CostFinalize 操作查询 Condition 表以确定计划安装哪些功能。

但是(来自同一个文档):

CostFinalize 操作必须在启动任何允许用户查看或修改特征表选择的用户界面序列之前执行

如果用户界面尚未显示,安装程序如何检测要安装哪些功能?

【问题讨论】:

    标签: wix windows-installer


    【解决方案1】:

    PublishProduct 存在于执行序列而不是 UI 序列中。您的自定义操作的名称意味着它应该在 StartServices(也在执行序列中)而不是 PublishProduct 操作之前安排。

    文件成本计算是您需要学习的另一个重要概念,但在这里并不真正相关。我将从这个必读内容开始:

    InstallSite: Installation Phases and In-Script Execution

    【讨论】:

    • 感谢您的解释和链接。现在这个概念对我来说更清楚了。阅读后,我自定义了一个标准的 Wix 对话框集(注入了我的自定义对话框,以接收要保存在配置文件中的数据),然后在 InstallExecuteSequence 中调用我的自定义操作。
    • 确保您考虑静默安装。在这种情况下,会跳过 UI 序列。
    • 对产品禁用静默安装是否正确?或者从我的自定义操作 dll 中记录一些错误?否则我将不得不跳过一些步骤(例如,不启动我的服务,因为它会有未初始化的配置)。
    • 对于家庭用户应用程序,也许。对于商业应用程序?不会。静默安装是企业将应用程序分发到成百上千台机器的一项重要功能。
    • 看看立即与延迟自定义操作以及 CustomActionData 的概念。这是大脑和肌肉模式。 Immediate 可以访问属性(数据采集和业务逻辑),但没有提升权限。它将数据传递给在系统上下文中运行的非模拟延迟自定义操作以完成工作。现在我们开始进入“成本核算”和脚本生成与脚本执行的概念。
    猜你喜欢
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    相关资源
    最近更新 更多