我有一个Web应用程序和部署项目,最初是在VS 2008中构建的,它安装了我的应用程序版本1.51。我现在正在使用VS 2010(我的应用程序需要.Net 4和Installer 4.5)并将我的应用程序和部署项目更新为1.52。如果我在原始系统上运行设置,一切都按预期工作。
如果我在已安装1.51的系统上运行1.52设置,而不是在设置结束时以1.52的完整副本结束,则删除1.51和1.52共有的所有文件(无论是否它们之间的版本不同),只部署了1.51中根本不存在的文件,并且我的CustomActions没有运行。该设置声称已成功完成。我使用/ l * vx选项运行安装程序并使用Wilogutl.exe分析日志文件,并显示“未找到错误”和“无需解决方案”。
我将RemovePreviousVersions设置为True,两个版本的UpgradeCode相同,更新了ProductCode和Version。如果我将RemovePreviousVersions设置为false,那么在已经安装了1.51的系统上安装1.52似乎可以获得所需的结果。
不应该将RemovePreviousVersions设置为true吗?
如果我将RemovePreviousVersions设置为false,我在进行升级安装时应该注意哪些潜在问题?
答案 0 :(得分:1)
您是否已对已更改所有组件GUID的安装项目执行了某些操作。如果组件的GUID在旧版本和新版本之间不相同,则组件引用计数机制将被破坏。因此版本1放置组件1,文件1.升级时,新版本放下组件2,它也放下文件1.然后RemoveExistingProducts操作将查找可以删除的任何组件。由于组件1的引用计数低至1,安装程序将尝试将其删除,包括文件1。
答案 1 :(得分:0)
将升级更改为主要升级,并在InstallExecuteSequence中的InstallInitialize之前移动RemoveExistingProducts标准操作。
正如Stephen Connolly所写,你可能搞砸了组件引用。这使得升级不可靠或完全不可能。您可以通过使用主要升级来“解耦”新版本和旧版本,因为主要升级不是升级,而是卸载旧版本并以链式顺序安装新版本。