Wix安装程序删除旧版本之前的主要升级自定义操作
我正在使用wix安装程序(版本3),我有一个版本1.99的msi和另一个版本2.00的msi。我的应用程序可以通过调用一些参数来导入和导出数据库。我正在尝试执行主要升级,并尝试在升级前后调用自定义操作。 现在,自定义操作代码工作正常。问题是,在删除旧版本之前应该运行的代码在删除后运行,因此无法激活应用程序并生成备份文件 简言之:在删除旧版本之前,如何确定自定义操作的时间以完成其工作 我这样称呼他们:Wix安装程序删除旧版本之前的主要升级自定义操作,wix,Wix,我正在使用wix安装程序(版本3),我有一个版本1.99的msi和另一个版本2.00的msi。我的应用程序可以通过调用一些参数来导入和导出数据库。我正在尝试执行主要升级,并尝试在升级前后调用自定义操作。 现在,自定义操作代码工作正常。问题是,在删除旧版本之前应该运行的代码在删除后运行,因此无法激活应用程序并生成备份文件 简言之:在删除旧版本之前,如何确定自定义操作的时间以完成其工作 我这样称呼他们: <CustomAction Id="doExport"
<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”属性,但没有任何结果。首先,进行升级,创建详细日志以确保自定义操作正常工作并被调用。您已将它们标记为立即,因此它们会在系统发生任何更改之前运行,并在删除旧产品之前被调用。当你说“代码工作得很好”时,你可能是指从你的交互帐户运行它。但事实并非如此。您的代码正在运行msiexec.exe进程,工作目录不是您所期望的,您的代码可能没有在正确的位置查找文件,它将不会被提升,因此可能无法执行它认为可以执行的操作。您的代码有很多可能无法按预期工作 如果您曾经将它们标记为延迟,我可以理解为什么doExport可能不起作用。如果没有看到您的主要升级元素,我无法确定,但是RemoveExistingProducts的默认计划是afterInstallValidate。您的自定义操作是在InstallInitialize之前进行的,因此MSI文件中的实际序列可以很容易地进行InstallValidate、RemoveExistingProducts、doExport、InstallInitialize 并且在您的自定义操作之前删除卸载旧版本的现有产品
因此,如果您想使用execute deferred,请在doExport上使用Before=“RemoveExistingProducts”,或者在Major中使用Schedule升级到afterInstallInitialize,并在InstallInitialize之前保留doExport Hi@PhilDW,我有一个简单的txt日志,可以证明它到达了代码并执行了它。我还添加了majorupgrade元素。显然,这不仅仅是因为它执行代码,还因为代码是否工作。如果代码在没有检查错误的情况下顺利通过,则假定一切正常,那么显然它将不工作。您的代码可能只是有一个异常捕捉器,该捕捉器会一直运行到最后,或者它总是在不起作用时返回success。正如我所说,您的代码的运行方式与从交互式帐户运行的测试不同。