组件之间的自定义操作

Custom Action between components

如何确保在安装两个组件之间触发自定义操作?

例如我有一些 Wix 定义如下:

<Feature Id="ProductFeature" Title="My Installer" Level="1">
  <ComponentGroupRef Id="DatabaseSetup" />
  <ComponentGroupRef Id="DatabaseCleanup" />
</Feature>

<InstallExecuteSequence>
  <Custom Action="RunDatabaseMigration" Before="InstallFinalize"></Custom>
</InstallExecuteSequence>

有没有办法确保自定义操作 RunDatabaseMigrationDatabaseSetupDatabaseCleanup 之间正确运行?

我期待这样的结果,但显然我只能为 Before 和 After 属性使用标准或自定义操作的名称,此解决方案不适用于组件。

<Custom Action="RunDatabaseMigration" After="DatabaseSetup"></Custom>

How to make sure a custom action to be triggered between installation of two components?

通常不可能在两个组件之间安排自定义操作。正如您自己已经发现的那样,BeforeAfter 属性必须命名标准或自定义操作。

Windows 安装程序不会一个接一个地安装组件。组件只是安装项的逻辑组,例如。 G。注册表项、文件等,但它们不定义安装顺序。相反,Windows 安装程序将不同类型的资源(如注册表项和文件)分组,并按照 InstallExecuteSequence table 定义的顺序安装这些组。例如,在某一时刻将安装所有文件(InstallFiles 操作),稍后将写入所有注册表项(WriteRegistryValues)。看看 suggested InstallExecuteSequence 以获得更好的想法。

也就是说,如果 DatabaseSetup 只安装一种资源(例如文件)而 DatabaseCleanup 安装另一种资源(例如注册表项),您可以在两者之间安排自定义操作关联的标准操作(在本例中为 InstallFilesWriteRegistryValues)。但是,如果两个组件安装相同类型的资源或混合资源,则无法使用该解决方法。在这种情况下,您必须将其中一个组件转换为您可以随时安排的自定义操作。