WiX:将永久组件还原为非永久状态

WiX:将永久组件还原为非永久状态,wix,uninstallation,permanent,Wix,Uninstallation,Permanent,我已经用Permanent=“yes”属性标记了一个写入注册表项的组件。后来我删除了这个属性,但组件仍然认为它是永久的。卸载日志显示: Disallowing uninstallation of component: {XXXXXXXX-3955-519D-AC73-F6832147D388} since another client exists 在Windows注册表中搜索该GUID不会给出任何结果。如何清理“Windows安装程序内存” 将文档设置为永久性属性 The installer

我已经用
Permanent=“yes”
属性标记了一个写入注册表项的组件。后来我删除了这个属性,但组件仍然认为它是永久的。卸载日志显示:

Disallowing uninstallation of component: {XXXXXXXX-3955-519D-AC73-F6832147D388} since another client exists
在Windows注册表中搜索该GUID不会给出任何结果。如何清理“Windows安装程序内存”

将文档设置为永久性属性

The installer registers an extra system client for the component in the Windows Installer registry settings (which basically just means that at least one product is always referencing this component)
但是在哪里可以找到并卸载此“额外系统客户端”?

AFAIK只有通过直接从注册表中删除条目才能“取消安装”。您可以在
HKEY\U CLASSES\U ROOT\Installer\Components
下找到该组件。组件键名是重新打包的guid。根据打包的GUID,可以按照以下规则进行计算:

压缩GUID可以通过对标准应用转换来获得 GUID。此转换执行以下操作:

  • 从标准GUID中删除大括号和分隔虚线
  • 在标准GUID中以相反顺序写入前三组十六进制字符
  • 在标准GUID中,第四组和第五组中每两个字符切换一次
请记住,为了以防万一,请先进行reg备份,并在尝试安装非永久性软件包之前将已安装的文件移开


另一种选择是为组件提供一个新的guid,而只保留旧的guid。

不要弄乱MSI的注册表数据库。这是现场安装吗?还是只在你的电脑上看到?在开发计算机上经常可以看到这样的问题,在开发计算机上,您时不时会遇到奇怪的安装状态。在干净的虚拟机上尝试它,以确定其他人是否看到了该行为。这在我的开发人员机器上非常常见。将GUID转换为数据包1后,我在注册表中找到了合适的安装程序组件并将其删除。“组件键名是重新打包的GUID。”-哪个GUID?我猜你是指标记为永久性的部件。在这种情况下,我有两台Server2008R2机器,一台根本没有“Components”键,另一台不包含转换后的GUID。“有什么想法吗?”NineTails的评论也适用于我。我在另一个地方找到了永久组件信息:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\
。有关更多详细信息,请参见此处: