我的代码与之前的版本有一些变化。在更改过程中,删除了一些dll。我正在使用wix来创建安装程序。所以现在,当我从旧版本升级到新版本,当我卸载产品时,在产品文件夹中,我看到那些旧的dll仍然存在。
逻辑上,它是正确的,因为旧版本具有这些文件。升级后,新版本将替换其新版本的dll。在卸载产品(此处为新版本)时,这些dll不是新版本的一部分,因此不会删除它们。
如何更改新版本部署代码以解决此升级问题?
预期结果:卸载升级版本应删除产品文件夹中的所有dll。
答案 0 :(得分:1)
如果删除组件,则必须使用主要升级。有关使用次要升级无法完成的事项列表,请参阅Changing the Product Code。
答案 1 :(得分:0)
实际上,这不符合逻辑:)如果你有a)真的做了一个成功的主要升级而且b)那些Dlls只是旧版本而不是你安装的新版本,那么它们根本就不应该存在。如果升级成功,旧产品将不再存在,并且没有旧版本可以获得这些文件 - 升级后将其卸载。如果您在“程序和功能”中有两个条目,则表示您没有进行正确的替换升级,并且仍然安装了较旧的产品。如果您在“程序和功能”中只有一个条目,那么使用组件ID很可能会出现问题。有时候这些都是关于那些ids的。例如,如果您在升级中为新升级中的其他内容使用了相同的组件ID,则Windows Installer无法将该ID(与较旧的Dll关联)重新计数为零并删除旧的DLL。确保旧版Dll的组件ID不在新升级中。除此之外,如果您曾将这些Dll标记为Permanent或SharedLegacy,那么当升级删除旧产品时,它们将不会被卸载。
在决定做什么之前,你应该弄明白到底发生了什么。您无法安装相同的ProductCode两次,因此您将进入某种维护模式,如果您没有进行升级而且未安装新产品。如果您想要实际升级,请使用WiX majorupgrade元素。
答案 2 :(得分:-1)
@Bob Arnson:我不想进行重大升级,因为我希望以前的版本不会被卸载但升级。所以我想出了一个修复,现在使用RemoveFile标记在那些组件下,指定那些文件ID在它们存在时被删除。
<RemoveFile Id = "id_to_be_removed" On = "uninstall" Name = "dll_name"/>