【发布时间】:2018-02-20 04:59:01
【问题描述】:
我有一个包含很多 MSI 的项目(安装了引导程序)。最近,在一次重大升级后,我注意到程序和功能(Win 7)中没有卸载以前的版本。也就是说,从版本 1 升级到版本 2 后,版本 1 和版本 2 都在 Programs and Features 中。
这是一个常见问题,但它是一个有很多不同灰度的问题——我有一个不常见的这个问题。
问题可能在于特定的 MSI。 此 MSI 只能在初始安装期间运行。因此我从不更改其版本号。这是它的样子(表明这是一次合法的重大升级):
<Product Id="*"
Name="MSI"
Language="1033"
Version="1.0.0.0"
Manufacturer="Bob"
UpgradeCode="GUID-HERE">
<Package InstallerVersion="200"
Compressed="yes"
InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate EmbedCab="yes"/>
<FeatureRef Id="ReferenceToFeature"/>
</Product>
这就是我认为这是导致问题的 MSI 的原因:当我运行主要升级时,程序和功能中有版本 1 和版本 2。当我使用详细日志运行卸载程序时,我可以看到它卸载了所有 MSI,因为我得到了 boostrapper 卸载日志文件,然后我得到了其余 MSI 的单独卸载日志文件。
如果我查看此 MSI 的日志文件,我发现了一个问题。这是我认为可能是问题的日志文件部分:
...
PROPERTY CHANGE: Adding INSTALLLEVEL property. It's value is '1'.
Disallowing uninstallation of component: {GUID-HERE} since another client exists
Disallowing uninstallation of component: {GUID-HERE} since another client exists
...
我认得这些 GUID。它们是我的 MSI 中组件的 GUID。我知道这意味着另一个程序正在使用该资源——这就是它不会卸载的原因——但在我的一生中,我想不出那会是什么程序!我在一个干净的虚拟机上安装,我的安装程序安装的程序在我卸载时没有运行!
更多信息让我认为此 MSI 导致 程序和功能 加倍:卸载第 2 版后,我当然只剩下第 1 版。当我卸载带有详细日志记录的版本 1,弹出的唯一 MSI 日志是有问题的 MSI!在卸载过程中不会卸载其他 MSI。
我已尝试将属性 AllowSameVersionUpgrade="yes" 添加到 MSI 的 元素 - - 这个
<MajorUpgrade AllowSameVersionUpgrade="yes"
DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
——这实际上破坏了我的安装程序,因为它会在更新安装期间安装 MSI,而我只希望在初始安装期间安装 MSI。它也不能解决问题,因为这两个版本仍然显示在程序和功能中。
但是,它确实会导致第一次卸载 MSI。也就是说,之前,当我没有输入 AllowSameVersionUpgrade="yes" 属性时,MSI 在版本 2 卸载期间不会成功卸载,然后当我卸载版本 1 我会得到一个日志文件来卸载它。当我添加属性时,我仍然会在 程序和功能 中获得双倍版本,除了这次我可以在第一次卸载期间卸载 MSI,然后在第二次卸载期间(应该的版本'一开始就不在那里),我没有得到任何 MSI日志文件——我得到的只是引导程序日志文件。
谁能解释这个问题?
好的!我设法在一个玩具程序中重现了这个问题,所以希望解决这个问题应该简单得多!
先生。阿斯穆尔,感谢您的关注。不过,我解决了这个问题。我犯了一个非常非常愚蠢的错误,我不好意思承认。可以肯定地说,我这两天一直在追自己的尾巴,让我的雇主花钱,因为……嗯,我小时候就被摔在头上,结果我不太聪明。
【问题讨论】:
-
我会敦促您分享您的修复作为您问题的答案(无论您认为错误是多么愚蠢,这并不意味着其他人也不会这样做),或者考虑删除这个问题。在研究一个问题时,没有什么比遇到“我解决了[但不会告诉你如何]!”的痕迹更令人沮丧的了。
标签: wix uninstallation windows-installer