【问题标题】:WIX: Can you run a Custom Action between two components or features?WIX:您可以在两个组件或功能之间运行自定义操作吗?
【发布时间】:2017-05-16 20:34:57
【问题描述】:

我是 WIX(Windows Installer XML)的新手,有些东西我不明白。

在我看来,自定义操作和功能之间存在矛盾:功能由安装用户选择,并按程序员确定的顺序运行。自定义操作是其中的必要部分(特别是如果安装需要运行外部脚本或 EXE),但在我看来,它们不能作为一组功能的一部分运行 - 只能在所有功能运行之前或之后运行.

您可以设置自定义操作以在组件内运行吗?您可以设置自定义操作以在两个功能之间运行吗?

【问题讨论】:

    标签: wix windows-installer


    【解决方案1】:

    不。功能只是逻辑实体,旨在为安装产品的人提供一种选择他们想要的组件的方式。组件更接近“真实”,但从某种意义上说,它们只描述了将安装哪些文件和注册表项等。所有实际工作都参与到操作中,无论是standard actions 还是自定义操作。

    查看您构建的 MSI 的 InstallExecuteSequence,只考虑 InstallFiles、WriteRegistryValues 和 MyCustomAction。稍微简化一下,InstallFiles 将检查所有选定的组件以确定要安装哪些文件,并将它们复制到目的地。 WriteRegistryValues 将检查所有选定的组件,并写入它们的注册表项和值。您的自定义操作可以在其中任何一个操作之前或之后发生,但不能出现在中间的某个位置。 (即使可以,InstallFiles 和 WriteRegistryValues 中的操作顺序也不一定是您可以控制的。)

    顺便说一句,我猜您会问这个问题,因为您的场景似乎要求您执行取决于确切机器状态的代码。例如,您可能希望在文件 A 存在但文件 B 仍然丢失的情况下运行自注册例程。这不是 Windows Installer 的正确方法。在此示例中,应改为识别自注册例程将编写的注册表项,并编写它们。当然,将这种建议应用于您的实际场景可能会很棘手。

    【讨论】:

    • 感谢您提供彻底而出色的解释。这帮助很大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    相关资源
    最近更新 更多