高级安装程序 - 更新时不覆盖文件,但卸载时删除文件

时间:2018-03-02 07:33:42

标签: windows-installer installer advanced-installer uninstaller

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

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

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

我已经尝试了很多选项来实现这一目标,但都是徒劳的。将条件UPGRADINGPRODUCTCODE设置为“不覆盖现有文件”的配置文件,当我们不希望在升级期间覆盖文件并在卸载时删除时,应该工作。但是设置此条件会在卸载时删除文件,并在更新时用新文件覆盖文件。

由于

2 个答案:

答案 0 :(得分:1)

升级安装包含两部分:

  • 卸载旧产品版本

  • 安装新产品版本

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

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

答案 1 :(得分:0)

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

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

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

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