1

我很确定这个问题不存在,但如果存在,我提前道歉,请告诉我。

我的公司要求我研究一个新的安装程序框架,我目前正在研究 Windows Installer 4.5 (MSI)。它可以完成我们需要它做的所有事情,所以我正在研究限制,我找不到的一件事是您是否可以多次将动作(标准或自定义)写入序列表。据我所见,人们没有,但它并没有说你不能

有人有什么想法吗?提前致谢 :)

编辑- 对于自定义操作尤其重要,因为我们使用自己的代码编写了很多安装程序包,并且可能需要对我们编写的多个 DLL 使用一个自定义操作。此外,我们想要一个不强制我们以特定顺序执行安装步骤的框架(这将是任意的 - 在完美的世界中),如果我们可以在序列表中多次使用一个动作,它也有可能做到这一点。

4

2 回答 2

2

对于自定义操作,最好的办法是设计一个表格驱动的自定义操作,其行为类似于 Windows Installer 标准表格。在该设计中,即时自定义操作被安排在相对于所有其他操作的适当时间。例如,Before='RemoveFiles'After='InstallFiles'(或其他任何东西。

即时自定义操作从一个或多个为操作提供数据的自定义表中读取行。多行允许您通过读取更多数据来“多次”运行操作。如果您需要修改机器状态,则立即自定义操作会安排一个或多个延迟自定义操作并使用适当的CustomActionData. 在这种情况下,延迟的自定义操作将按照您的计划执行。您使用 ::MsiDoAction() 安排自定义操作,但我更喜欢使用 WiX 工具集的 wcautil.lib 提供的 WcaDoAction()。

此设计在 MSI SDK 中记录了有关延迟自定义操作的信息,WiX 工具集使用该模式进行所有自定义操作。在考虑修复、修补和卸载等其他场景时,它非常强大并且工作得非常好。

于 2013-05-28T15:32:48.500 回答
1

根据 MSDN:InstallExecuteSequence 表

InstallExecuteSequence 表具有以下列。

ColumnType 键可以为空

动作标识符 YN

纽约州条件

序列整数 NY

主键在 Action 上,因此它只能列出一次。

可能有一些方法可以使用 MsiDoAction 在多个地方动态安排自定义操作,但我从未尝试过。真正的问题是为什么你认为你需要这样做?在编写 MSI 的 10 年中,我从来不需要这样做。

于 2013-05-28T13:02:17.153 回答