删除旧版本之前,Wix安装程序主要升级自定义操作

时间:2014-11-17 15:31:19

标签: wix

我正在使用wix安装程序(版本3),我有一个版本为1.99的msi和另一个版本为2.00的msi。我的应用程序可以通过调用一些参数来导入和导出数据库。我正在尝试执行重大升级,并尝试在升级之前和之后调用自定义操作。 现在,自定义操作代码工作得很好。问题是,在旧版本被删除之前应该运行的代码在删除后运行,因此无法激活应用程序并生成备份文件。

简而言之:在删除旧版本之前,如何计算自定义操作以完成其工作?

这就是我打电话给他们的方式:

    <CustomAction Id="doExport"
              Return="check"
              Execute="immediate"
              BinaryKey="ImportExportBinary"
              DllEntry="BeforeInstall" />

    <CustomAction Id="doImport"
                Return="check"
                Execute="immediate"
                BinaryKey="ImportExportBinary"
                DllEntry="AfterInstall" />

  <InstallExecuteSequence>
     <Custom Action="doExport" Before="InstallInitialize"> NOT Installed</Custom>
     <Custom Action="doImport" After="InstallFinalize"> NOT Installed</Custom>
  </InstallExecuteSequence>

编辑:

以下是主要的升级代码:

<MajorUpgrade AllowDowngrades="no" 
                Schedule="afterInstallFinalize"
                DowngradeErrorMessage='Cannot downgrade!' 
                AllowSameVersionUpgrades='yes' ></MajorUpgrade>

我尝试过使用CustomAction元素的“Execute”属性,但没有任何结果。

1 个答案:

答案 0 :(得分:1)

首先,进行升级以创建详细日志,以确保自定义操作正在运行并被调用。您已立即对它们进行了标记,因此它们会在系统发生任何更改之前运行,因此将在删除旧产品之前调用它们。当你说&#34;代码工作得很好&#34;你可能的意思是当你从交互式帐户运行它。但那并没有发生。您的代码用完msiexec.exe进程,工作目录不是您所期望的,您的代码可能找不到正确的文件位置,它不会被提升,因此可能无法做到这一点认为它可以。您的代码有很多机会无法按预期工作。

如果您将它们标记为延期,我可以看到为什么doExport可能无效。如果没有看到您的MajorUpgrade元素,我无法确定,但RemoveExistingProducts的默认调度是afterInstallValidate。您的自定义操作在InstallInitialize之前,因此MSI文件中的实际序列可以很容易地是InstallValidate,RemoveExistingProducts,doExport,InstallInitialize。

执行卸载旧版本的

和RemoveExistingProducts位于自定义操作之前。

因此,如果您想使用execute deferred,请尝试Before =&#34; RemoveExistingProducts&#34;在您的doExport上,或使用MajorUpgrade中的Schedule to afterInstallInitialize并在InstallInitialize之前保留doExport。

相关问题