如何修正 MSI 軟體更新註冊損毀問題

本文提供在安裝軟體更新之後,某些產品修復或卸載可能會失敗的問題解決方案。

適用於:Windows 10 - 所有版本、Windows Server 2012 R2
原始 KB 編號: 971187

徵狀

安裝軟體更新之後,某些產品的修復或卸載可能會失敗。 如果您已啟用 MSI 記錄,則會在記錄中找到下列幾行:

找不到本機修補程式 ''。 在來源尋找它。
...
MainEngineThread 傳回 1612

當您檢視登錄時,可能會發現下列登錄子機碼遺失軟體更新快取註冊: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\<SID>\Patches\<SQUID>

解決方案

重要事項

這個章節、方法或工作包含修改登錄的步驟。 然而,不當修改登錄可能會發生嚴重的問題。 因此,請務必謹慎地依照這些步驟執行。 為了有多一層保護,請先備份登錄再進行修改。 如此一來,您就可以在發生問題時還原登錄。

若要解決此問題,請遵循下列步驟:

  1. 確認產品受到影響。

    如果要執行這項操作,請依照下列步驟執行:

    1. 開啟下列登錄子機碼,以尋找產品的軟體更新註冊: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\UserData\<SID>\Products\<ProductSQUID>\Patches
      在此子機碼下,套用至產品的每個軟體更新都會有一個子機碼。

    2. 針對下列格式的每個子機碼,執行下列步驟: 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 字串值所參考的封裝也存在。

      1. 如果遺漏 LocalPackage 字串值或參考的套件,則會影響產品。 繼續進行步驟 2。
      2. 如果參考的套件存在,而且不需要採取其他動作。
  2. 重新建立軟體更新快取登錄詳細數據。 如果要執行這項操作,請依照下列步驟執行:

    1. 在 %windir%\installer\*.msp 中搜尋您嘗試安裝的軟體更新。 確認軟體更新在摘要資訊 Stream 中具有正確的修補程式全域唯一標識碼 (GUID) ,並以正確的產品 GUID 為目標。

      注意事項

      由於此目錄可作為每一使用者安裝和每部電腦安裝的快取,因此您可以使用每位使用者安裝來模擬此目錄中的軟體更新。

    2. 建立下列子機碼: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\UserData\<SID>\Patches\<PatchSQUID>

      注意事項

      重新建立軟體更新快取登錄會造成安全性風險。 不過,這是修復損毀的唯一方法。 您可以確定軟體更新是正確的軟體更新,以降低安全性風險。 若要這樣做,請確認軟體更新的總和檢查碼。

    3. 在您建立步驟 2 的登錄子機碼中建立 LocalPackage 字串值。 請確定 LocalPackage 字串值已設定為軟體更新的路徑。

  3. 刪除剩餘的軟體更新參考。 如果要執行這項操作,請依照下列步驟執行:

    1. 開啟下列子機碼,然後從 “AllPatches” multi-sz 值移除 <PatchSQUID>HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\UserData\<SID>\Products\<ProductSQUID>\Patches

    2. 刪除下列登入子機碼: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\UserData\<SID>\Products\<ProductSQUID>\Patches\<PatchSQUID>

    3. 刪除下列登入子機碼: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\UserData\<SID>\Patches\<PatchSQUID>

      注意事項

      如果遺漏此子機碼,請略過此步驟。

    4. 如果產品是每部計算機安裝,請遵循下列步驟:

      1. 開啟下列子機碼: HKEY_LOCAL_MACHINE\Software\Classes\Installer\Products\<ProductSQUID>\Patches

        1. <PatchSQUID>如果字串值存在,請將其刪除。
        2. <PatchSQUID>如果字串值存在於 「Patches」 Multi-sz 值中,請刪除<PatchSQUID>字串值。
      2. 如果有下列登錄子機碼存在,請將其刪除: HKEY_LOCAL_MACHINE\Software\Classes\Installer\Patches\<PatchSQUID>

    5. 如果產品是以非受控方式安裝,則為:

      1. 開啟下列登入子機碼: HKEY_CURRENT_USER\Software\Microsoft\Installer\Products\<ProductSQUID>\Patches

        1. <PatchSQUID>如果字串值存在,請將其刪除。
        2. <PatchSQUID>如果 「Patches」 Multi-sz 值中的 存在,請將它移除。
      2. 如果有下列登錄子機碼存在,請將其刪除: HKEY_CURRENT_USER\Software\Microsoft\Installer\Patches\<PatchSQUID>

    6. 如果產品已安裝為每位使用者管理:

      1. 開啟下列登入子機碼: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Managed\<SID>\Installer\Products\<ProductSQUID>\Patches

        1. <PatchSQUID>如果字串值存在,請將其刪除。
        2. <PatchSQUID>如果 「Patches」 Multi-sz 值中的 存在,請將它移除。
      2. 如果下列登錄子機碼存在,請將其刪除: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Managed\<SID>\Installer\Patches\<PatchSQUID>

參考資料

本文並非 Windows Update 或 Microsoft Update 所發生問題的特定文章。