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

本文提供在您安裝軟體更新後,針對特定產品所修復或卸載的問題的解決方案。

適用于:  Windows 10-all edition,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. 開啟下列子機碼,然後 <PatchSQUID> 從 "AllPatches" 多重 sz 值中移除: 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> 字串值出現在 [修補程式] 多重 sz 值中,請刪除該 <PatchSQUID> 字串值。
      2. 如果有下列 registry 子機碼,請將其刪除: HKEY_LOCAL_MACHINE\Software\Classes\Installer\Patches\<PatchSQUID>

    5. 如果產品已安裝于每位使用者的非受管理:

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

        1. <PatchSQUID> 字串值存在,請將它刪除。
        2. 如果 <PatchSQUID> 從 [修補程式] 多重 sz 值存在,請將其移除。
      2. 如果有下列 registry 子機碼,請將其刪除: 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> 從 [修補程式] 多重 sz 值存在,請將其移除。
      2. 如果有下列登錄子機碼,請將其刪除: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Managed\<SID>\Installer\Patches\<PatchSQUID>

參考

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