似乎升级安装不会用新版本替换文件,但它们实际上会卸载旧的安装程序包并安装新的安装程序包。让我们想象我已经安装了我的应用程序,并在安装目录中生成了一些文件。然后用户获得新版本的产品并启动安装包。该软件包删除旧版本的产品(因为新的安装软件包已将“删除以前的版本”设置为true,更高的版本号和不同的产品代码)。由应用程序创建但不是由包创建的文件不会被删除,而且这很好。但用户可以将新版本安装到其他位置,然后应用程序将找不到旧的应用程序文件。如何处理它?如果应用程序已安装,请编写一些自定义操作和条件以跳过文件夹选择屏幕?或者,也许已经有一种内置的方式来升级指定目录中的旧安装文件?可以升级安装替换文件吗?
2
A
回答
1
您的应用程序不应将其设置存储在Program Files中,它们应存储在CommonAppDataFolder
,AppDataFolder
或LocalAppDataFolder
中。如果您使用这些文件夹中的一个来存储您的应用程序设置/数据,则用户可以自由将其安装到任何其他位置,并且应用程序仍会看到其设置/数据。
据我了解,升级的行为取决于你计划安装序列RemoveExistingProducts
行动。
编辑:既然你不能改变你的程序保存其文件,你将不得不手动跟踪的安装位置。执行升级操作时,更新的产品通常会安装到相同的位置(这可能需要更改您的向导UI)。
如果您希望即使手动重新安装(即用户卸载您的应用程序,然后再次将其重新安装到另一个位置)仍保留设置,我所看到的唯一选项是将安装位置存储在注册表中。如果该值不在注册表中,则不应运行其他操作。如果存在以前安装位置的值,则将其保存。然后将设置/数据从旧位置移动到新位置(通过将临时行添加到MoveFile
表中)。最后,将新的安装位置保存到注册表中。
请注意,在Windows Vista及更高版本下,在Program Files中存储设置/文件可能无法正常工作,尤其是在UAC打开时;并且您的设置可能实际上存储在虚拟存储区而不是程序文件中。更新应用程序将比尝试移动文件更好。
相关问题
- 1. Install4j:安装后可以安装可执行文件吗?
- 2. OpenShift上的Node.JS可以升级吗?
- 3. 可以安装4j忽略以前的安装重新安装/升级默认目录?
- 4. 我可以换装img替代文字吗?
- 5. 可以安装symfony吗?
- 6. UIWebView可以替换Safari吗?
- 7. .net安装项目强制重新安装新文件替换
- 8. 蚂蚁可以替换jar/ear/war文件中的文本吗?
- 9. 可以用regex替代替换吗?
- 10. WIX - 主要升级卸载它没有安装的文件
- 11. Web安装项目从VS2008升级到VS2010后删除文件
- 12. wix主要升级不安装所有文件
- 13. 将Artifactory从3.2.1.1升级到5.4.6失败(仅WAR文件安装)
- 14. 将WiX安装集升级到相同的文件夹
- 15. WIX升级只有版本而不是已安装的文件
- 16. WiX主要升级拒绝替换现有的文件!
- 17. 替换WiX主要升级中的未版本化文件
- 18. 如何在MSI升级时强制进行文件替换
- 19. Windows安装程序中的主要升级与次要升级
- 20. NullSoft安装程序 - 升级应用程序时升级app.config
- 21. Windows安装程序升级与以前的版本但不改变DLL文件
- 22. 安装文件名可以从可执行文件的版本号派生吗?
- 23. 是否可以将可移植的Python 32位安装升级到64位安装?
- 24. 我们可以将iphone sdk 3.1升级到更高级别吗?
- 25. R升级到3.4安装包
- 26. 新手:安装和升级Python模块
- 27. 升级或安装自制公式
- 28. Python2.7,33的pip安装/升级错误
- 29. 如何升级我的MacPorts Perl安装?
- 30. 将Visual Studio安装升级到WiX
这是一个好点,但我不能改变我的应用程序存储文件的方式/方式。 – 2011-04-26 11:02:04
@ Bogdan0x400我更新了答案。 – 2011-04-26 12:21:02