本文提供了修复或卸载某些产品后安装软件更新后可能会失败的问题的解决方案。
原始 KB 数: 971187
现象
安装软件更新后,某些产品的修复或卸载可能会失败。 如果启用了 MSI 日志记录,则日志中会找到以下行:
找不到本地修补程序“”。 在源头查找它。 ... MainEngineThread 正在返回 1612
在注册表中查看时,你可能会发现以下注册表子项中缺少软件更新缓存注册: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\<SID>\Patches\<SQUID>
解决方法
重要
此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 作为额外保护措施,请在修改注册表之前先将其备份。 如果之后出现问题,您就可以还原注册表。
若要解决此问题,请执行下列步骤:
-
确认产品受到影响。
要执行此操作,请执行以下步骤:
-
通过打开以下注册表子项查找产品的软件更新注册:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\UserData\<SID>\Products\<ProductSQUID>\Patches在此子项下,每个应用于产品的软件更新都有一个子项。 -
对于采用以下格式的每个子项,请执行以下步骤:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\UserData\<SID>\Products\<ProductSQUID>\Patches\<PatchSQUID>验证是否存在以下子项:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\UserData\<SID>\Patches\<PatchSQUID>如果缺少子项,则产品将受到影响。 继续执行步骤 2。
如果子项存在,请验证 LocalPackage 字符串值是否已正确设置,并且 LocalPackage 字符串值引用的包也存在。
- 如果缺少 LocalPackage 字符串值或引用的包,则产品将受到影响。 继续执行步骤 2。
- 如果引用的包存在,则无需执行其他操作。
-
-
重新创建软件更新缓存注册表详细信息。 为此,请按照下列步骤进行操作:
-
在 %windir%\installer\*.msp 中搜索尝试安装的软件更新。 验证软件更新在摘要信息流中是否具有正确的修补程序全局唯一标识符(GUID),并针对正确的产品 GUID。
注意
由于此目录充当每用户安装和每台计算机安装的缓存,因此可以使用每个用户安装来模拟此目录中的软件更新。
-
创建以下子项:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\UserData\<SID>\Patches\<PatchSQUID>注意
重新创建软件更新缓存注册表存在安全风险。 但是,这是修复损坏的唯一方法。 可以通过确保软件更新是正确的软件更新来降低安全风险。 为此,请验证软件更新的校验和。
-
在创建步骤 2 的注册表子项中创建 LocalPackage 字符串值。 确保 LocalPackage 字符串值设置为软件更新的路径。
-
-
删除剩余的软件更新引用。 要执行此操作,请执行以下步骤:
-
打开以下子项,然后从“AllPatches”多 sz 值中删除
<PatchSQUID>:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\UserData\<SID>\Products\<ProductSQUID>\Patches -
删除以下注册表子项:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\UserData\<SID>\Products\<ProductSQUID>\Patches\<PatchSQUID> -
删除以下注册表子项:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\UserData\<SID>\Patches\<PatchSQUID>注意
如果缺少此子项,请跳过此步骤。
-
如果产品是按计算机安装的,请执行以下步骤:
-
打开以下子项:
HKEY_LOCAL_MACHINE\Software\Classes\Installer\Products\<ProductSQUID>\Patches<PatchSQUID>如果字符串值存在,请将其删除。<PatchSQUID>如果字符串值存在于“Patchs”Multi-sz 值中,请删除<PatchSQUID>字符串值。
-
如果存在以下注册表子项,请将其删除:
HKEY_LOCAL_MACHINE\Software\Classes\Installer\Patches\<PatchSQUID>
-
-
如果产品是按用户非托管安装的:
-
打开以下注册表子项:
HKEY_CURRENT_USER\Software\Microsoft\Installer\Products\<ProductSQUID>\Patches<PatchSQUID>如果字符串值存在,请将其删除。<PatchSQUID>如果存在“Patchs”Multi-sz 值,请将其删除。
-
如果存在以下注册表子项,请将其删除:
HKEY_CURRENT_USER\Software\Microsoft\Installer\Patches\<PatchSQUID>
-
-
如果产品是按用户管理的:
-
打开以下注册表子项:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Managed\<SID>\Installer\Products\<ProductSQUID>\Patches<PatchSQUID>如果字符串值存在,请将其删除。<PatchSQUID>如果存在“Patchs”Multi-sz 值,请将其删除。
-
如果存在以下注册表子项,请将其删除:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Managed\<SID>\Installer\Patches\<PatchSQUID>
-
-
参考
本文不特定于Windows 更新或Microsoft更新所发生的问题。