多次向Windows Installer序列表添加操作

时间:2013-05-28 05:33:22

标签: windows-installer

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

我公司要求我查看新的安装程序框架,我目前正在查看Windows Installer 4.5(MSI)。它完成了我们需要它做的所有事情,因此我正在研究限制,而我无法找到的一件事是你是否可以多次将一个动作,标准或自定义编写到一个序列表中。根据我的看法,人们,但没有说明不能的任何地方。

有人有任何想法吗?在此先感谢:)

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

2 个答案:

答案 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年中,我从未需要。