如何在wix中将属性传递给回滚自定义操作?

Posted

技术标签:

【中文标题】如何在wix中将属性传递给回滚自定义操作?【英文标题】:How to pass properties to Rollback custom action in wix? 【发布时间】:2013-12-19 18:41:36 【问题描述】:

我有一对自定义操作,一个将一些不推荐使用的文件移动到临时目录,另一个在安装程序回滚以将它们放回时运行。我必须使用自定义操作,因为以前的安装程序是 installshield。

以下是我的自定义操作:

<CustomAction Id="DeleteUserAdminDeprecatedFiles" BinaryKey="FileSearchCA" DllEntry="DeleteUserAdminDeprecatedFiles" Execute="immediate" Return="check" />

    <CustomAction Id="RestoreDeprecatedFiles"
                  BinaryKey="FileSearchCA"
                  DllEntry="RestoreDeprecatedFiles"
                  Execute="rollback"
                  Return="ignore"
              />

    <CustomAction Id="SetRollbackData" Property="RestoreDeprecatedFiles" Value="RootDir=[DEPRECATEDFILESROOTDIR];TempDir=[DEPRECATEDTEMPORARYDIR]" Execute="immediate" Return="ignore"/>

以下是这些动作的安排:

            <Custom Action="SetRollbackData" After="DeleteUserAdminDeprecatedFiles">
            OLD_VERSION_FOUND OR                        <!--Run if we are doing a major upgrade (msi -> msi).-->
            REMOVEINSTALLSHIELD
        </Custom>
        <Custom Action="DeleteUserAdminDeprecatedFiles" Before="InstallFinalize">
            OLD_VERSION_FOUND OR                        <!--Run if we are doing a major upgrade (msi -> msi).-->
            REMOVEINSTALLSHIELD                         <!--Run if we are upgrading installshield instance.-->
        </Custom>
        <Custom Action="RestoreDeprecatedFiles" After="InstallInitialize"/>

然后在日志中我得到:

MSI (s) (04:74) [11:31:22:162]: Doing action: DeleteUserAdminDeprecatedFiles
Action 11:31:22: DeleteUserAdminDeprecatedFiles. 
Action start 11:31:22: DeleteUserAdminDeprecatedFiles.
MSI (s) (04:3C) [11:31:22:171]: Invoking remote custom action. DLL: C:\Windows\Installer\MSI8804.tmp, Entrypoint: DeleteUserAdminDeprecatedFiles
SFXCA: Extracting custom action to temporary directory: C:\Windows\Installer\MSI8804.tmp-\
SFXCA: Binding to CLR version v4.0.30319
Calling custom action FileSearchCA!FileSearchCA.FileSearchCA.DeleteUserAdminDeprecatedFiles
Starting UserAdmin delete deprecated files Custom Action.
MSI (s) (04!50) [11:31:22:376]: PROPERTY CHANGE: Adding DEPRECATEDFILESROOTDIR property. Its value is 'C:\Program Files\Duck Creek Technologies\ExampleUserAdmin\bin'.
MSI (s) (04!50) [11:31:22:380]: PROPERTY CHANGE: Adding DEPRECATEDTEMPORARYDIR property. Its value is 'C:\Users\LMUser\AppData\Local\Temp\t3n1evfp.dwa'.
Action ended 11:31:22: DeleteUserAdminDeprecatedFiles. Return value 1.
MSI (s) (04:74) [11:31:22:429]: Doing action: SetRollbackData
Action 11:31:22: SetRollbackData. 
Action start 11:31:22: SetRollbackData.
MSI (s) (04:74) [11:31:22:437]: Note: 1: 2723 2: SetRollbackData 
DEBUG: Error 2723:  Custom action SetRollbackData specifies unsupported type

任何解决此问题的帮助将不胜感激。

【问题讨论】:

【参考方案1】:

我是个白痴,我把它修好了。

我不得不改变:

<CustomAction Id="SetRollbackData" Property="RestoreDeprecatedFiles" Value="RootDir=[DEPRECATEDFILESROOTDIR];TempDir=[DEPRECATEDTEMPORARYDIR]" Execute="immediate" Return="ignore"/>

收件人:

<CustomAction Id="SetRollbackData" Property="RestoreDeprecatedFiles" Value="RootDir=[DEPRECATEDFILESROOTDIR];TempDir=[DEPRECATEDTEMPORARYDIR]" />

【讨论】:

我知道这已经过时了,但是当您必须回答自己的问题时,这很可悲。干得好,感谢记录!

以上是关于如何在wix中将属性传递给回滚自定义操作?的主要内容,如果未能解决你的问题,请参考以下文章

WiX - 带有安装和卸载(或回滚)参数的多个自定义操作

Wix:修补时运行条件自定义操作(非完整安装)

如何在自定义操作 DLL (MSI/Wix) 中获取“INSTALLED”属性?

参数未传递给 WiX 中的延迟自定义操作

Wix静默安装MSI我们可以停止创建目录吗

Wix - 自定义操作返回代码 - 处理