如何修正 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 中搜尋您嘗試安裝的軟體更新。 確認軟體更新在摘要資訊資料流程中具有正確的修補程式全域唯一識別碼 (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 所發生的問題。