组件之间的自定义操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了组件之间的自定义操作相关的知识,希望对你有一定的参考价值。

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

例如,我有一些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>
答案

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

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

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

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

以上是关于组件之间的自定义操作的主要内容,如果未能解决你的问题,请参考以下文章

在 Flex 中的自定义组件之间传递值 - mxml [关闭]

Vue的自定义组件之间的数据传递

Vue 组件之间传参!

片段内的自定义列表不起作用

带有圆角而不是 100% 屏幕宽度的自定义片段对话框

片段中的自定义列表适配器