【问题标题】:Advanced Installer – Don’t overwrite file when update but remove the file when uninstall高级安装程序 - 更新时不要覆盖文件,但卸载时删除文件
【发布时间】:2018-03-02 07:33:41
【问题描述】:

我正在使用 Advanced Installer 14.6,并且对我的应用程序的卸载程序有以下要求:-

1) 如果用户进行卸载,它会从 Program Files 中彻底删除应用程序的文件夹,包括文件夹中的所有文件。

2) 如果调用了更新过程,则将配置文件保存在应用程序的文件夹中并更新所有其他文件。

我已经尝试了很多方法来实现这一点,但都是徒劳的。将配置文件的条件 UPGRADINGPRODUCTCODE 设置为“不覆盖现有文件”,当我们不希望文件在升级过程中被覆盖并在卸载时删除时应该起作用。但是设置此条件会在卸载时删除文件,并在更新时用新文件覆盖文件。

谢谢

【问题讨论】:

    标签: windows-installer installation advanced-installer uninstallation


    【解决方案1】:

    升级安装包括两部分:

    • 旧产品版本的卸载

    • 新产品版本的安装

    要在升级过程中备份一些文件,您需要通过自定义操作来处理它。

    将有两个自定义操作,第一个自定义操作将在删除旧版本之前备份文件,另一个自定义操作将在安装升级版本后恢复备份的文件。

    【讨论】:

      【解决方案2】:

      您应该定义“升级”的实际含义。您的帖子暗示您正在进行 Windows Installer 重大升级,但最重要的是,您还没有说明升级的顺序。如果它是“早期”排序的,例如在 InstallInitialize 之后,那么它实际上仍然是卸载旧产品,然后安装升级,因此您丢失了配置文件。人们处理您描述的情况的方式是在升级结束时(例如在 InstallExecute 之后和 InstallFinalize 之前)对升级(RemoveExistingProducts 调用)进行排序,这会导致升级安装在现有产品上,并覆盖文件遵循规则,特别是这个:

      https://msdn.microsoft.com/en-us/library/windows/desktop/aa370531(v=vs.85).aspx

      即修改后的数据文件不会被覆盖。因此,如果该配置文件在安装后已更新,则不会被覆盖。因此,假设您要保留任何更新的设置,则无需执行任何操作来保留文件。如果您仍想在升级之前复制文件,请使用升级安装时设置的属性 - 文档对此并不清楚,但它似乎是您在升级操作选项卡中设置的结果属性。

      我不清楚你在用“将条件 UPGRADINGPRODUCTCODE 设置为“不要覆盖现有文件”“做什么。升级安装中未设置 UPGRADINGPRODUCTCODE 属性。它在卸载时在旧产品中设置,以便旧产品知道它是否正在升级。它不能用于实际的传入升级设置,因为它没有设置为任何内容。

      【讨论】:

        【解决方案3】:

        正如 Phil 所说,在升级包中使用属性 UPGRADINGPRODUCTCODE 是没有用的。您应该改用属性OLDPRODUCTS,在Advanced Installer's user guide. 的以下文章中阅读更多内容

        此外,如果该文件是标准 XML 或 INI 文件,您可以使用 Advanced Installer 中的 search support 读取用户自定义的条目和新版本编写的 write them back in the config file。这样,您还可以轻松地在此文件中包含新版本的新更新。 (不只是继续使用第一个版本安装的原始文件

        【讨论】:

          猜你喜欢
          • 2011-03-18
          • 2014-10-16
          • 1970-01-01
          • 2010-10-01
          • 1970-01-01
          • 2011-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多