2011-04-26 57 views
2

似乎升级安装不会用新版本替换文件,但它们实际上会卸载旧的安装程序包并安装新的安装程序包。让我们想象我已经安装了我的应用程序,并在安装目录中生成了一些文件。然后用户获得新版本的产品并启动安装包。该软件包删除旧版本的产品(因为新的安装软件包已将“删除以前的版本”设置为true,更高的版本号和不同的产品代码)。由应用程序创建但不是由包创建的文件不会被删除,而且这很好。但用户可以将新版本安装到其他位置,然后应用程序将找不到旧的应用程序文件。如何处理它?如果应用程序已安装,请编写一些自定义操作和条件以跳过文件夹选择屏幕?或者,也许已经有一种内置的方式来升级指定目录中的旧安装文件?可以升级安装替换文件吗?

回答

1

您的应用程序不应将其设置存储在Program Files中,它们应存储在CommonAppDataFolder,AppDataFolderLocalAppDataFolder中。如果您使用这些文件夹中的一个来存储您的应用程序设置/数据,则用户可以自由将其安装到任何其他位置,并且应用程序仍会看到其设置/数据。


据我了解,升级的行为取决于你计划安装序列RemoveExistingProducts行动。


编辑:既然你不能改变你的程序保存其文件,你将不得不手动跟踪的安装位置。执行升级操作时,更新的产品通常会安装到相同的位置(这可能需要更改您的向导UI)。

如果您希望即使手动重新安装(即用户卸载您的应用程序,然后再次将其重新安装到另一个位置)仍保留设置,我所看到的唯一选项是将安装位置存储在注册表中。如果该值不在注册表中,则不应运行其他操作。如果存在以前安装位置的值,则将其保存。然后将设置/数据从旧位置移动到新位置(通过将临时行添加到MoveFile表中)。最后,将新的安装位置保存到注册表中。

请注意,在Windows Vista及更高版本下,在Program Files中存储设置/文件可能无法正常工作,尤其是在UAC打开时;并且您的设置可能实际上存储在虚拟存储区而不是程序文件中。更新应用程序将比尝试移动文件更好。

+0

这是一个好点,但我不能改变我的应用程序存储文件的方式/方式。 – 2011-04-26 11:02:04

+0

@ Bogdan0x400我更新了答案。 – 2011-04-26 12:21:02

相关问题