我是WIX(Windows Installer XML)的新手,有些东西我不明白。
在我看来,自定义操作和功能之间存在矛盾:功能由安装用户选择,并由程序员确定的顺序运行。自定义操作是这方面的一部分(特别是如果安装需要运行外部脚本或EXE),但在我看来,它们不能作为一组功能的一部分运行 - 仅在运行所有功能之前或之后
您可以设置自定义操作以在组件内运行吗?您可以设置自定义操作以在两个功能之间运行吗?
答案 0 :(得分:1)
不。功能仅是逻辑实体,旨在为安装产品的人员提供一种选择所需组件的方法。组件更接近“真实”,但从某种意义上说,它们只描述将安装哪些文件和注册表项等。所有实际工作都参与了操作,无论是standard actions还是自定义操作。
查看构建的MSI的InstallExecuteSequence,只考虑InstallFiles,WriteRegistryValues和MyCustomAction。简化一下,InstallFiles将检查所有选定的组件,以确定要安装的文件,并将它们复制到目的地。 WriteRegistryValues将检查所有选定的组件,并编写其注册表项和值。您的自定义操作可以在其中任何一个操作之前或之后发生,但不能位于中间的某个位置。 (即使可以,InstallFiles和WriteRegistryValues中的操作顺序也不一定是你可以控制的。)
顺便说一句,我猜你会问这个问题,因为你的场景似乎要求你执行依赖于确切机器状态的代码。例如,您可能希望运行文件A存在的自注册例程,但文件B仍然缺失。这不是Windows Installer的正确方法。在此示例中,应该确定自注册例程将写入的注册表项,并创建它们。当然,将这种建议应用于您的实际情况可能会非常棘手。