当卸载我的应用程序没有删除文件时,我遇到了问题。 我发现当应用程序在日志中卸载时它会打印:
...
MSI (s) (0C:84) [11:39:07:836]: Disallowing uninstallation of component: {51DB6066-AFCD-5A03-BE34-09E197799057} since another client exists
...
然后我通过使用 WiX 工具集发现有一个名为 DTF 的 API(在Wix 工具集中提到:“由于存在另一个客户端而不允许卸载组件”后完成清理),我在 LinqPad 中执行了查询(c# 语句):
(按 F4 键导入命名空间和附加引用)
//using Microsoft.Deployment.WindowsInstaller;
//using System.Linq;
// <ref>"C:\Program Files (x86)\WiX Toolset v3.9\SDK\
Microsoft.Deployment.WindowsInstaller.dll"</ref>
var client = ComponentInstallation.AllComponents
.Where (c => c.ComponentCode == "{72ED6979-0AAD-317C-A25C-AB9A121E6D30}")
.Select(c => c);
client.Dump();
有旧记录:
我无法使用“msiexec /x {GUID}”删除它们,因为这些产品被标记为“IsInstalled=False”。
那么如何删除这些旧记录?
不允许卸载组件:{51DB6066-AFCD-5A03-BE34-09E197799057},因为存在另一个客户端
这通常意味着您的系统上当前安装了一个或多个引用此组件的产品。
您确定系统上没有其他产品引用该组件吗?
您不想进行这种清理,因为 Windows 安装程序会在没有任何用户干预的情况下处理所有这些。
您之前是否安装了旧版本的产品,或者此文件是由合并模块安装的?
对 Wix MSI 故障排除非常有用的信息。