【问题标题】:How to call custom action after files copied in wix在wix中复制文件后如何调用自定义操作
【发布时间】:2015-11-18 01:57:17
【问题描述】:

我想在文件复制到目标文件夹后执行自定义操作。

在自定义操作中,我运行复制的脚本文件,所以给我找不到错误文件。

<CustomAction Id="RunDBScript"
              BinaryKey="CA"
              DllEntry="RunDBScript"
              Execute=" immediate"
              Return="check" />


<Custom Action="RunDBScript" After="InstallFiles">
    <![CDATA[NOT Installed]]>
  </Custom>

此自定义操作给出一个错误文件/目录未找到。所以这个动作在文件复制之前调用。

那么,文件复制后如何调用自定义操作?

我不明白为什么在 InstallFiles 之前调用此自定义操作,即使我指定为 After="InstallFiles"。

【问题讨论】:

  • 推迟您的 CA:Execute="deferred"
  • 如果我使用 Execute="deferred" 然后给我错误:“无法通过非立即自定义操作访问会话详细信息”
  • 您是如何解决问题的?

标签: wix custom-action


【解决方案1】:

将您的自定义操作移到InstallFinalize 之后。这是 InstallExecuteSequence 中唯一可以在安装产品文件后立即执行操作的地方。

【讨论】:

  • 我没有你的第一句话,你能补充一些细节吗?
  • 我的经验是文件在安装完成后才会被复制。我创建了一个自定义操作来检查文件是否存在。使用 InstallFinalize 设置了自定义操作,但该文件不存在。
  • 也可以在AppSearch之后在InstallUISequence中执行即时自定义操作
【解决方案2】:

当您使用延迟自定义操作时,您必须通过 session.CustomActionData["propertyname"] 访问值。

会话字典值只能由正在编写执行脚本的即时自定义操作读取。

延迟的自定义操作在脚本运行时执行,因此项目属性不再可用。 要使用它,您必须实现双重自定义操作,以便为真正的自定义操作提供所需的属性。

按照下面的例子:

<CustomAction Id="CustomActionID_Data" Property="CustomActionID" Value="INSTALLDIR=[INSTALLDIR];OTHERPROPERTY=[OTHERPRPJECTPROPERTY]"></CustomAction>
<CustomAction Id="CustomActionID" BinaryKey="FILEBINARYID" DllEntry="METHODNAMEATCUSTOMACTION" Execute="deferred"></CustomAction>

在此示例中,您需要在 InstallExecutionSequence 调用自定义操作“_Data”并在调用真实操作之后,因此第一个“_Data”将设置所需的属性。然后,您可以使用 session.CustomActionData[""] 访问代码中的这些属性。

作为补充,下面是如何在 InstallExecuteSequence 调用自定义操作的示例。

<Custom Action="CustomActionID_Data" After="InstallFiles">NOT (REMOVE="ALL")</Custom>
<Custom Action="CustomActionID" After="CustomActionID_Data">NOT (REMOVE="ALL")</Custom>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    相关资源
    最近更新 更多