我想在文件复制到目标文件夹后执行自定义操作。
在自定义操作中,我运行复制的脚本文件,因此找不到错误文件。
<CustomAction Id="RunDBScript"
BinaryKey="CA"
DllEntry="RunDBScript"
Execute=" immediate"
Return="check" />
<Custom Action="RunDBScript" After="InstallFiles">
<![CDATA[NOT Installed]]>
</Custom>
此自定义操作会找不到错误文件/目录。所以这个动作在文件复制之前调用。
那么,如何在文件复制后调用自定义操作?
我不明白为什么在InstallFiles之前调用此自定义操作,即使我指定After =“InstallFiles”。
答案 0 :(得分:6)
在InstallFinalize之后移动自定义操作。这是InstallExecuteSequence中唯一可以在安装产品文件后执行立即操作的地方。
答案 1 :(得分:5)
使用延迟自定义操作时,必须通过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>