gpt4 book ai didi

wix - 如何在 WiX 中的 ="InstallValidate"之后执行删除现有产品之前的自定义操作

转载 作者:行者123 更新时间:2023-12-02 14:23:20 25 4
gpt4 key购买 nike

我有这样的东西:

<InstallExecuteSequence>
<RemoveExistingProducts After="InstallValidate"/>
</InstallExecuteSequence>

由于其中一个卸载失败,我需要在删除现有产品之前执行自定义操作来解决问题。大致如下:

<CustomAction Id="FixStuff" .. />

<InstallExecuteSequence>
<Custom Action="FixStuff" Before="RemoveExistingProducts" />
<RemoveExistingProducts After="InstallValidate"/>
</InstallExecuteSequence>

这当然不起作用,因为自定义操作不能在 InstallInitialize 之前。我真的很想删除 InstallValidate 和 InstallInitialize 之间的现有产品,但我想在删除现有产品之前执行 FixStuff。

有可能做到这一点吗?

最佳答案

遗憾的是,您无法在使用当前配置的RemoveExistingProducts 之前运行提升的自定义操作。

一些可能的方法是:

  1. 将RemoveExistingProducts 移至InstallFinalize 之前。这解决了自定义操作问题,但可能会出现其他问题,因为这种方法有很多限制(组件需要在版本之间维护其名称和 GUID,您的自定义操作应该知道升级是在安装结束时执行的等)。

  2. 创建一个 EXE Bootstrap ,在启动新 MSI 之前修复旧安装程序。此 Bootstrap 可以通过 list 要求管理员权限:

http://msdn.microsoft.com/en-us/library/bb756929.aspx

  • 使用以下方法修复损坏的 MSI:

    • 修复旧 MSI 中的问题
    • 创建一个 BAT 或 EXE Bootstrap ,通过以下命令重新缓存它:

    msiexec/fv

    • 在发布新软件包之前将此 MSI 作为更新分发
  • 当您的新软件包运行RemoveExistingProducts时,旧的缓存的MSI应该被修复并且应该正确卸载。

    关于wix - 如何在 WiX 中的 ="InstallValidate"之后执行删除现有产品之前的自定义操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4501361/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com