似乎升级安装不会用新版本替换文件,但实际上它们会卸载旧的安装程序包并安装新的安装程序包。让我们想象一下,我已经安装了我的应用程序,并在安装目录中生成了一些文件。然后,用户获得该产品的新版本并启动安装包。该软件包删除旧版本的产品(因为新的安装程序包已将“删除以前的版本”设置为true,更高的版本号和不同的产品代码)。由应用程序创建但不是由包创建的文件不会被删除,这很好。但是用户可以将新版本安装到其他位置,然后应用程序将找不到旧的应用程序文件。怎么处理呢?如果已安装应用程序,请编写一些跳过文件夹选择屏幕的自定义操作和条件?或者可能已经有一种内置的方法来升级指定目录中的旧安装文件?
答案 0 :(得分:1)
您的应用程序不应将其设置存储在程序文件中,它们应存储在CommonAppDataFolder
,AppDataFolder
或LocalAppDataFolder
中。如果您使用其中一个文件夹存储应用程序设置/数据,则用户可以将其安装到任何其他位置,应用程序仍会看到其设置/数据。
据我了解,升级行为取决于您在安装顺序中安排RemoveExistingProducts
操作的位置。
编辑:由于您无法更改应用程序存储文件的位置,因此您必须手动跟踪安装位置。执行升级操作时,通常会将更新的产品安装到同一位置(这可能需要更改向导UI)。
如果您想要保留设置,即使手动重新安装,即用户卸载了您的应用程序,然后再将其安装到另一个位置,我看到的唯一选项是将安装位置存储在注册表中。如果注册表中不存在该值,则不应运行其他操作。如果存在先前安装位置的值,则保存它。然后将设置/数据从旧位置移动到新位置(通过向MoveFile
表添加临时行)。最后,将新的安装位置保存到注册表中。
请注意,在Windows Vista及更高版本中,在Program Files中存储设置/文件可能无法正常工作,尤其是在启用UAC的情况下;并且您的设置可能实际存储在虚拟存储中而不是存储在程序文件中。更新应用程序比尝试移动文件更好。