2015-07-13 107 views
0

我卸载应用程序时没有删除文件时遇到问题。 我发现,有当应用被卸载的记录它会打印:WIX:产品未完全卸载(系统中的文件未被删除)

... 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 toolset: complete cleanup after "disallowing uninstallation of component since another client exists"提到) ,以及i在LinqPad(C#声明)执行的查询:

(F4按进口命名空间和additiona参考)

//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(); 

有我s旧recods: enter image description here

我不能删除它们使用“msiexec/x {GUID}”,因为这些产品被标记为“IsInstalled = False”。

那么如何删除这些旧记录呢?

+0

我在注册表中找到了按名称排列的功能,并将它们从以下位置删除: [HKEY_CLASSES_ROOT \ Installer \ Features \ ...但是卸载过程仍然不会删除文件,并且日志中会显示相同的信息消息。 Theres仍然保留具有0个特性项目的ProductInstallation项目。 – Drasius

回答

0

如果不允许部件的卸载:{51DB6066-渔护署-5A03-BE34-09E197799057}自另一客户端存在

这一般意味着有一个或多个产品系统当前哪个参考在此组件上安装。

您确定系统中没有其他产品引用此组件吗?

你不想做这种清理,因为Windows安装程序在没有任何用户干预的情况下处理所有这些。

你以前安装过旧版本的产品吗?还是由合并模块安装此文件?

+0

你好,我知道这意味着什么。安装产品不处理这些功能覆盖,它们仍然是重复的。因为这些文件不会被删除。我试过旧版本的安装,但没有帮助。这些记录可能是开发产品时自定义设置的结果(可能是,我更改了某些产品的GUID并安装了此自定义版本,我不确定)。 – Drasius

+0

请您详细说明当您说“功能覆盖”时,您的意思是什么?在Windows安装程序的世界中,如果组件在系统上注册,它总是与产品关联。你有没有尝试搞清楚与组件关联的其他客户端?您可以通过使用API​​来实现此目的:https://msdn.microsoft.com/en-us/library/aa370094%28v=vs.85%29.aspx。 –

+0

在故事问题中查看我的图像,有与产品相关的功能。因此,对于我们解决的一些PC,文件夹丢失,卸载失败。但是对于我的个人电脑,一些注册表被破坏,因为我无法修复它。 – Drasius