我很确定这个问题不存在,但如果确实存在,我会提前道歉,请告诉我。
我公司要求我查看新的安装程序框架,我目前正在查看Windows Installer 4.5(MSI)。它完成了我们需要它做的所有事情,因此我正在研究限制,而我无法找到的一件事是你是否可以多次将一个动作,标准或自定义编写到一个序列表中。根据我的看法,人们不,但没有说明不能的任何地方。
有人有任何想法吗?在此先感谢:)
编辑 - 这对自定义操作尤为重要,因为我们使用自己的代码编写了很多安装程序包,并且可能需要对我们编写的多个DLL使用一个自定义操作。另外,我们希望一个框架不会强迫我们以特定的顺序执行安装步骤(它将是任意的 - 在一个完美的世界中),如果我们可以在序列表中多次使用一个动作,它也可能这样做。
答案 0 :(得分:2)
对于自定义操作,最好的办法是设计一个像Windows Installer标准表一样的表驱动自定义操作。在该设计中,相对于所有其他操作,在适当的时间安排立即自定义操作。例如,Before='RemoveFiles'
或After='InstallFiles'
(或其他。
立即自定义操作从一个或多个自定义表中读取行,这些自定义表为操作提供数据。多行允许您通过读取更多数据使操作“多次”运行。如果您需要修改计算机状态,则立即自定义操作会使用相应的CustomActionData
计划一个或多个延迟自定义操作。在这种情况下,延迟的自定义操作将在您安排它们时执行。您使用:: MsiDoAction()计划自定义操作,但我更喜欢使用WiX工具集的wcautil.lib提供的WcaDoAction()。
此设计在MSI SDK中有关延迟自定义操作的文档,WiX toolset使用该模式进行所有自定义操作。它非常强大,在考虑其他方案(如修复,修补和卸载)时效果非常好。
答案 1 :(得分:1)
每个MSDN:InstallExecuteSequence Table
InstallExecuteSequence表包含以下列。
ColumnType Key Nullable
行动标识符Y N
条件条件N Y
序列整数N Y
主键是Action,因此它只能列出一次。
可能有一些方法可以使用MsiDoAction在多个地方动态安排自定义操作,但我从未尝试过。真正的问题是你为什么认为你需要这样做?在编写MSI的10年中,我从未需要。