在测试我们的一个 WiX 构建的 MSI 的降级功能时,我注意到了一些奇怪的事情。
我已允许MajorUpgrade元素中的降级,并且我已将该元素安排为afterInstallInitialize(但我已经用afterInstallValidate彻底尝试过,我遇到了同样的问题;我们不能在该操作之后拥有它,但我想我会测试它)。
许多文件(例如我们服务的 bin 文件夹中的 DLL)都是更高版本的,每个版本都有;因此,我们降级到的版本包含较低版本的文件。然而,在降级期间,除了服务 EXE 文件之外,所有这些文件都安装得很好;此外,服务也未安装在 Windows 中。
考虑到以上所有,在这个问题上花了两天时间,经过大量搜索,我似乎不知所措。
我尝试了两件事似乎带来了一些希望:
1) 我尝试将REINSTALLMODE属性设置为amus。这可确保安装 EXE 文件以及 Windows 服务。但是我读到的关于该属性的大多数内容都警告不要使用它,我什至必须在设置该属性时取消 ICE40才能构建我的包。这一切都与我有关,因为我不确定如果我在我的 MSI 文件中使用此属性会遗漏哪些负面影响。
2)当我从标记服务 EXE 文件的File元素中删除KeyPath属性并将该属性放在Component元素上时,降级期间将服务 EXE 文件安装到系统上,但服务仍未安装在视窗。调查后,如果我想安装服务,似乎KeyPath属性必须在File元素上。所以在我看来,这个想法似乎无济于事。
任何帮助或建议将不胜感激。我们真的可以提供降级功能。
谢谢大家的时间。