還原遺失的 Windows Installer 快取檔,並解決 SQL Server 更新期間發生的問題

本文說明您可以用來解決因 windows installer 快取損毀而安裝 SQL Server service pack 或累計更新時發生的各種錯誤的各種程式。

原始產品版本:   Sqlserver
原始 KB 編號:   969052

注意

本文所述的程式僅提供緊急降低,不是永久修正。 使用此應急程式的客戶應使用 Windows installer 快取驗證程式套件驗證其 Windows Installer 快取(如知識庫文章中所述, 缺少 Windows installer 快取需要電腦重建)。

徵狀

當您嘗試安裝 Microsoft SQL Server service pack 或累計更新時,可能會遇到各種錯誤訊息,而且可能會指出 Windows Installer 快取問題。 Windows Installer 快取(位於 c:\windows\installer 資料夾中)會儲存使用 Windows Installer 技術所安裝之應用程式的重要檔案,不應加以刪除。 如果安裝程式快取遭到損害,您可能不會立即看到問題,除非您執行卸載、修復或更新 SQL Server 等動作。

當您安裝 SQL Server 時,Windows 安裝程式會將重要檔案儲存在 Windows Installer 快取中 (預設值為 C:\Windows\Installer) 。 這些檔案是卸載和更新應用程式時所需的。 無法將遺失的檔案複製到電腦之間,因為它們是唯一的。

Microsoft 建議您先使用下列文章所述的修復程式來驗證您目前的安裝,以進行 SQL Server 安裝:

您應該使用命令列:執行從原始安裝媒體進行修復 setup.exe/ACTION=REPAIR/INDICATEPROGRESS=TRUE

請先修復常見的共用元件和功能,然後重複此命令,修復安裝的實例。 在修復過程中,[安裝] 對話方塊就會消失。 只要進度視窗不會顯示錯誤,修復程式便會如預期的那樣繼續進行。 如果找不到特定元件的安裝程式快取檔案,則修復程式將會發生錯誤。

原因

當 windows installer 快取中缺少 windows Installer 資料庫檔案 ( .msi) 或 Windows Installer 修補檔 ( .msp) 時,可能會發生這些問題。 Windows Installer 快取位於資料夾: %windir%\installer 中。

使用 Windows Installer 安裝產品時,會將原始 .msi 檔案的去除版本儲存在 Windows Installer 快取中。 每次更新產品(例如修復程式)、累積更新或 service pack 安裝程式,也會在 Windows Installer 快取中儲存相關 .msp 或 .msi 檔案。

任何更新產品(如修復程式、累積更新或 service pack 安裝程式)的任何更新,都取決於 Windows Installer 快取中所儲存之檔案的資訊。 若沒有此資訊,新的更新就無法執行所需的轉換。

解決方案

若要解決這些問題,請使用下列其中一個程式。

步驟 1 ..:使用 FixMissingMSI 工具

在此程式中,您將使用 FixMissingMSI 工具來識別 Windows Installer 快取中遺失的 MSI 及 MSP 檔案。 其他步驟您可以將工具指向原始媒體位置,然後重新緩存遺失的檔案。

您可以從 GitHub 存放庫下載 FixMissingMSI 工具。

如需詳細資訊,請參閱 SQL 設定 ToolSuite 簡介 (1) -FixMissingMSI

程式 1. b.:使用 FindSQLInstalls.vbs 腳本

若要完成此程式中的步驟,您必須將 FixMissingMSI 資料夾中的 FindSQLInstalls.vbs 腳本,從 GitHub 存放庫 複製到您嘗試更新 SQL Server 安裝之電腦上的本機資料夾。

注意

FindSQLInstalls.vbs 腳本會收集資訊以修正不正確套件路徑。 此腳本會用於來源位置,以確保所有 MSP 套件都位於 Windows Installer 快取目錄中。 在執行腳本輸出檔案中所需之動作所需之行的指令之後,如果原始來源媒體可供使用,則會重新新增遺失的封裝。

若要使用腳本解決這些問題,請遵循下列步驟:

  1. 按一下 這裡 以移至 GitHub 上的 FindSQLInstalls.vbs 原始頁面。

  2. 選取此頁面上的所有內容,複製並貼上至文字檔。 將文字檔儲存為 FindSQLInstalls.vbs

  3. 將提升許可權的命令提示字元,開啟您儲存 FindSQLInstalls.vbs 檔的目錄,然後執行命令: Cscript FindSQLInstalls.vbs %computername%_sql_install_details.txt

  4. 在 [記事本] 等文字編輯器中開啟步驟2中的檔案,並找出導致失敗的問題。 若要這麼做,請搜尋文字檔以取得如下的字串模式:

    • 不要
    • !!!
  5. 根據步驟3中的結果,採取必要的步驟。

    注意

    請參閱 範例 一節中有關這些步驟的詳細資訊。

  6. 重複步驟2到4,直到在步驟2中建立的文字檔不再包含參照無效路徑的文字,或缺少所更新元件的檔。

範例

下列範例是當您執行 FindSQLInstalls.vbs 腳本時產生的輸出檔案中所述的動作專案和說明。

範例1:缺少安裝程式檔案

以下是當您錯過 Windows Installer 快取資料夾中的 .msi 套件時所產生的輸出範例。

================================================================================
PRODUCT NAME : Microsoft SQL Server 2008 Database Engine Services  
================================================================================
Product Code: {9FFAE13C-6160-4DD0-A67A-DAC5994F81BD}
Version : 10.2.4000.0
Most Current Install Date: 20110211
Target Install Location:
Registry Path: HKEY_CLASSES_ROOT\Installer\Products\C31EAFF906160DD46AA7AD5C99F418DB\SourceList
Package : sql_engine_core_inst.msi
Install Source: \x64\setup\sql_engine_core_inst_msi\
LastUsedSource: m;1;G:\x64\setup\sql_engine_core_inst_msi\

LastUsedSource 線指向用來執行安裝程式的位置。

在 LastUsedSource 行中, m; 專案表示媒體,並指出原始來源為 CD/DVD 媒體。

在下列範例中,來源是 CD 或 drive G 中的 DVD。如果是從檔案資料夾或從網路共用進行安裝,LastUsedSource 行將以 n; 專案開始,接著是 Numeric_Data_Name; 專案,然後是實際路徑:

!!!! sql_engine_core_inst.msi DOES NOT exist on the path in the path G:\x64\setup\sql_engine_core_inst_msi\ !!!!
Action needed, re-establish the path to G:\x64\setup\sql_engine_core_inst_msi\

[必要動作] 行會顯示必須存在的完整路徑,以便更新原始安裝媒體的遺失檔案:

安裝程式快取檔案: C:\WINDOWS\Installer\19b4d2.msi

安裝程式快取檔案行會確認安裝程式快取檔的名稱:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! C:\WINDOWS\Installer\19b4d2.msi DOES NOT exist in the Installer cache. !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

輸出的下列區段會建議您採取的動作,以解析遺失的檔案:

需要的動作,請重新建立或重新建立目錄的路徑: G:\x64\setup\ sql_engine_core_inst_msi \then 重新執行此腳本以更新安裝程式快取,而結果上行的路徑必須存在於根位置,才能解決您的 msi/msp 檔案未發現或損毀的問題。在某些情況下,您可能需要手動複製遺失的檔案,或手動取代已存在的問題檔案:副本 "G:\x64\setup\sql_engine_core_inst_msi\sql_engine_core_inst.msi" C:\WINDOWS\Installer\19b4d2.msi 在出現提示時,取代現有的檔案。

範例2:遺失的修補程式

遺失的修補程式可能會產生與範例1中的專案類似的專案。 在大部分情況下,您會注意到修補程式 LastUsedSource 列中參照修補程式的專案,這一行類似: Patch LastUsedSource: n;1;c:\0ca91e857a4f12dd390f0821a3\HotFixSQL\Files\

此輸出指出下列關於修補程式安裝的相關資訊:

  • 您可以按兩下修補程式的可執行檔,以安裝原始的修補程式。
  • 修補程式的安裝程式在安裝修補程式時使用 temp 資料夾 c:\0ca91e857a4f12dd390f0821a3
  • 若要重新建立路徑,您必須執行相同的可執行檔,並新增參數: /x:c:\0ca91e857a4f12dd390f0821a3

注意

這個命令會強制可執行檔,將檔案解壓縮至上一個遺失的位置,並重新建立所需的結構,以更新 Windows installer 快取與任何遺失的檔案。 實際的位置會不同,且單一的修補程式(如 service pack)可能需要解壓縮至多個位置。 每個已安裝的產品都包含一個區段,其中包含安裝的修補程式的下列資訊:

顯示名稱:
知識庫文章 URL: http://support.microsoft.com/?kbid=<value>
Patch LastUsedSource:

知識庫文章 URL 行可協助您下載任何修補程式媒體(如有必要)。

步驟2:手動還原檔案

若要手動還原 Windows Installer 快取中遺失的檔案,請遵循下列步驟:

  1. 從安裝記錄檔或 Windows Installer 所維護的登錄專案中,收集有關遺失檔案的完整詳細資料。 例如,在 [ 徵兆 ] 區段的 [錯誤訊息 1] 中,錯誤訊息中會出現解決問題所需的所有資訊:

    • PatchName: "KB981355) (64-bit) " 的 SQL Server 2008 R2 (的修復程式1702
    • 修補程式所使用的原始 MSP 檔案: sql_engine_core_inst .msp
    • 快取的 MSP 檔案: c:\Windows\Installer\1fdb1aec.msp
  2. 如果您沒有所有詳細資料,請參閱步驟 2:手動還原 檔案一節,以取得收集這些詳細資料的步驟。

  3. 造訪 查詢,然後搜尋與此修補程式相關聯的知識庫文章。 在此範例中,您必須搜尋 KB981355。

  4. 將此修補程式套件下載至您的電腦。 請務必下載對應至必要平臺的修補程式套件。 在此範例中,套件是 SQLServer2008R2-KB981355-x64.exe。

  5. 使用下列語法解壓縮修補套裝程式的內容: C:\Temp>SQLServer2008R2-KB981355-x64.exe /x C:\Temp\SQLServer2008R2-KB981355-x64\

  6. 找出原始的 msp 檔案 sql_engine_core_inst .msp 檔案。 檔案應該位於下列資料夾: C:\Temp\SQLServer2008R2-KB981355-x64\x64\setup\sql_engine_core_inst_msi\

  7. 將此原始的 msp 檔案複製到下列 Windows Installer 快取: %windir%\installer\

  8. 將原始的 msp 檔案( sql_engine_core_inst .msp)重新命名為下列名稱:快取的 msp 檔1fdb1aec。

您可以針對導致錯誤的更新,啟動安裝程式,並繼續更新程式。 您可能會遇到缺少 Windows Installer 快取檔案的其他元件或同一產品的另一次更新的訊息。

若要取得與 SQL Server 產品元件相關之所有缺失 Windows Installer 快取檔案的清單,您可以下載 [ 詳細資訊 ] 區段中所述的 SQL Server 2008 R2 BPA 工具。

如果錯誤訊息參照到遺失的 Windows Installer 資料庫檔案 ( .msi) ,您就不需要執行步驟2到4。 相反地,您可以直接移至步驟5。 您必須從原始媒體找到您用來安裝產品的 .msi。 如果此錯誤訊息是為 sql_engine_core_inst.msi 產生的,您必須從資料夾結構的 [安裝] 介質中找出此檔案: \x64\setup\sql_engine_core_inst_msi\ 。 其他步驟都相同。

尋找遺失 .msp 檔案的修補程式套件和產品詳細資料

不同版本的產品會針對此問題產生不同的錯誤訊息。 在 [ 徵兆 ] 區段所述的錯誤訊息中,會顯示安裝程式從 SQL Server 2008 SP1 開始的更新。 若為其他更新,您會收到錯誤訊息,指出 Windows Installer 快取中遺失的修補程式檔案和特定的更新詳細資料可能未明確指出。 針對這些錯誤訊息,安裝記錄檔會包含遺失 Windows Installer 快取檔案的相關資訊。 範例安裝記錄檔如下:

MSI (s) (FC:F8) [13:48:58:649]: Opening existing patch 'C:\WINDOWS\Installer\145258.msp'.  
MSI (s) (FC:F8) [13:48:58:649]: Couldn't find local patch 'C:\WINDOWS\Installer\145258.msp'. Looking for it at its source.  
MSI (s) (FC:F8) [13:48:58:649]: Resolving Patch source.  
MSI (s) (FC:F8) [13:48:58:649]: Note: 1: 2203 2: D:\cda162709d239766830bae5ce12b\HotFixSQL\Files\sqlrun_sql.msp 3: -2147287037  
MSI (s) (FC:F8) [13:48:58:649]: SOURCEMGMT: Source is invalid due to missing/inaccessible package.  
MSI (s) (FC:F8) [13:49:29:961]: Product: Microsoft SQL Server 2005 -- Installation failed.  
MSI (s) (FC:F8) [13:49:29:992]: MainEngineThread is returning 1635  
This patch package could not be opened. Verify that the patch package exists and that you can access it, or contact the application vendor to verify that this is a valid Windows Installer patch package. D:\SQL2K5\Servers\Setup\SqlRun_SQL.msi

如果您仔細檢查此安裝記錄,它已經為您提供修補程式所使用之原始 MSP 檔案的相關資訊: sqlrun_sql .msp

若要在 Windows Installer 快取中尋找遺失 .msp 檔案的詳細資訊,請遵循下列步驟:

  1. 在下列 Windows Installer 修補程式登錄子機碼中搜尋遺失的 .msp 檔案: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Patches\

  2. 尋找 修補程式 GUID

  3. 搜尋下列 Windows Installer 產品登錄子機碼中的修補程式 GUID: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\

在範例安裝記錄檔中,遺失 .msp 檔案及其對應修補程式詳細資料的相關資訊,都存在於下列登錄專案中:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Patches\A3B085EA74A9A7640A496636F7EF9A44

數值:0

名稱: LocalPackage

資料: C:\WINDOWS\Installer\145258.msp

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\1EB3A031CC585314E87AA527E46EECC2\Patches\A3B085EA74A9A7640A496636F7EF9A44

值:6

名稱: DisplayName

資料:針對 SQL Server 資料庫服務的 GDR 2050,2005 ENU (KB932555)

現在,您已具備所有資訊點,可啟動步驟,以解析 Windows Installer 快取中遺失的檔案。

注意

如果您使用 SQL Server 2008 Service Pack 3 (SP3) 或更新版本,您也可以收到遺失 .msi 檔案的類似錯誤訊息。 使用此錯誤訊息,您可以快速判斷遺失的檔案、要下載什麼服務套件,以及您可以在哪裡找到下載專案。

如需如何取得 service pack 的詳細資訊,請參閱 KB2546951-SQL Server 2008 Service pack 3 所修復的問題清單

步驟3:從系統狀態備份還原

您可以從系統狀態備份還原,如缺少 Windows Installer 快取所述, 需要重新組裝電腦

其他資訊

注意

下列錯誤訊息可以在事件記錄中或下列其中一個資料夾中的設定記錄中找到,而且表示您應該繼續修復受影響的實例:

  • 針對 SQL Server 2008 和 SQL Server 2008 R2: C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap
  • 針對 SQL Server 2012: C:\Program Files\Microsoft SQL Server\110\Setup Bootstrap
  • 針對 SQL 2005 (所有分支)

    Product Version 安裝程式套件 (MSI) 時,發生錯誤訊息 安裝程式快取套件 (MSP) 時出現錯誤訊息
    SQL Server 2005 1636無法安裝 Windows Installer MSI 檔案
    1636無法安裝 Windows Installer MSP 檔案

    注意

    您必須複查安裝記錄檔,以找出任何快取檔是否遺失。 如需如何執行此動作的詳細資訊,請移至 [ 解決方法 ] 區段。

  • SQL Server 2008 SP1

    Product Version 安裝程式套件 (MSI) 時,發生錯誤訊息 安裝程式快取套件 (MSP) 時出現錯誤訊息
    SQL Server 2008 SP1 無錯誤訊息 TITLE: SQL Server 安裝失敗。
    ------------------------------
    SQL Server 安裝程式發生錯誤: 無法開啟修補程式檔案。檔案: c:\WINNT\Installer\FileName.msp。錯誤碼0x84B20001。
    ------------------------------
  • 針對 SQL Server 2008 SP3 不適用僅限組建 (CU/GDR 分支)

    Product Version 安裝程式套件 (MSI) 時,發生錯誤訊息 安裝程式快取套件 (MSP) 時出現錯誤訊息
    SQL Server 2008 SP3 已遺失快取的 MSI 檔案 C:\Windows\Installer\FileName.msi 。 其原始檔案是 sql_engine_core_inst.msi 安裝的產品 SQL Server 2008 資料庫引擎服務 NetworkPath ,版本 VersionNumber ,語言 ENU
    缺少快取的修補程式檔案 C:\Windows\Installer\FileName.msp 。 這個快取檔案的原始檔案是 sql_engine_core_inst.msp 可從 Service Pack 3 安裝 SQL Server 2008 (KB2546951) (64 位) ,版本 VersionNumber

    注意

    當您執行升級時,會收到下列錯誤訊息:
    SQL Server error2

  • 僅適用于 SQL Server 2008 R2 SP1 (CU/GDR 分支不適用)

    Product Version 安裝程式套件 (MSI) 時,發生錯誤訊息 安裝程式快取套件 (MSP) 時出現錯誤訊息
    SQL Server 2008 R2 SP1 TITLE: SQL Server 安裝失敗。
    ------------------------------
    SQL Server 安裝程式發生下列錯誤: C:\Windows\Installer\FileName.msi
    ------------------------------
    缺少快取的修補程式檔案 C:\Windows\Installer\FileName.msp 。 這個快取檔案的原始檔案是 sql_engine_core_inst_loc.msp 可安裝于 SQL Server 2008 R2 Service Pack 1 的 (KB2528583) (64-位) ,版本 VersionNumber

    注意

    當您執行升級時,會收到下列錯誤訊息:  SQL Server 錯誤

  • SQL Server 2008 R2 SP2

    Product Version 安裝程式套件 (MSI) 時,發生錯誤訊息 安裝程式快取套件 (MSP) 時出現錯誤訊息
    SQL Server 2008 R2 SP1 已遺失快取的 MSI 檔案 C:\Windows\Installer\FileName.msi 。 其原始檔案已 sql_engine_core_inst.msi ,且已安裝產品 SQL Server 2008 R2 SP1 資料庫引擎服務 NetworkPath ,版本 VersionNumber ,語言 LanguageName
    缺少快取的修補程式檔案 C:\Windows\Installer\FileName.msp 。 這個快取的檔案的原始檔案是 sql_engine_core_inst_loc .msp,可從 sql Server 2008 R2 的 Service Pack 1 安裝, (KB2528583) (64-位) ,版本 VersionNumber

    注意

    當您執行升級時,會收到下列錯誤訊息:  SQL Server error3

  • 在 CU2 之前針對 SQL Server 2012

    沒有遺失 MSP 或 MSI 檔案的訊息。 不過,錯誤碼1714會記錄在安裝程式記錄檔中。

    Summary.txt 檔案中:元件名稱: SQL Server 安裝程式支援檔案元件錯誤碼:1714

    Detail.txt 檔中:

    Date/Time Slp: Sco: FileFilePath does not exist  
    Date/Time Slp: Sco: FileFilePathdoes not exist  
    Date/Time Slp: Checkpoint: PREINSTALL_SQLSUPPORT_CPU64_ACTION  
    Date/Time Slp: Sco: Attempting to create base registry key HKEY_LOCAL_MACHINE, machineServer Name
    Date/Time Slp: Sco: Attempting to open registry subkey    Software\Microsoft\Windows\CurrentVersion\Installer  
    Date/Time Slp: Sco: Attempting to get registry value InstallerLocation  
    Date/Time Slp: Windows installer version : 5.0.7601.17514  
    Date/Time Slp: Sco: Waiting for service 'msiserver' to accept the stop request.  
    Date/Time Slp: Sco: Attempting to open SC Manager  
    Date/Time Slp: Sco: Attempting to open service handle for service msiserver  
    Date/Time Slp: Invoking QueryServiceStatus Win32 API  
    Date/Time Slp: Sco: Attempting to close service handle for service msiserver  
    Date/Time Slp: Sco: Attempting to close SC Manager  
    Date/TimeSlp: Target package: "FilePath"  
    Date/TimeSlp: MSI Error: 1714 The older version of Microsoft SQL Server 2012 Setup (English) cannot be removed. Contact your technical support group.  
    Date/TimeSlp: InstallPackage: MsiInstallProduct returned the result code 1603.  
    Date/TimeSlp: Using MSI error code to detect the retry option: 1714  
    Date/TimeSlp: No retry-able MSI return code detected.
    
  • 針對 SQL Server 2012 CU2 (和任何後續 CU 或 SP)

    Product Version 安裝程式套件 (MSI) 時,發生錯誤訊息 安裝程式快取套件 (MSP) 時出現錯誤訊息
    SQL Server 2008 R2 SP1 已遺失快取的 MSI 檔案 C:\Windows\Installer\FileName.msi 。 其原始檔案為 C:\Windows\Installer\sql_FeatureName.msi 產品 MICROSOFT SQL ServerVersion from C:\originalfolder ,version VersionNumber ,language 已安裝 Language
    缺少快取的修補程式檔案 c:\Windows\Installer\FileName.msp 。 其原始檔案是 sql_engine_core_inst.msp 可從 Hotfix 2316 for SQL Server 2012 (KB2679368) (64-bit) 版本安裝 VersionNumber 。 缺少快取的修補程式檔案 C:\Windows\Installer\FileName.msp 。 其原始檔案是 C:\Windows\Installer\sql_FeatureName.msp 可從修補程式(適用于 <HotfixNumber> SQL SERVER 2012 KB 編號版本)安裝 VersionNumber

    注意

    在 SQL Server 2012 的某些特定狀況下,RTM 媒體可能無法正確註冊。 當您卸載這兩種情況下的累計更新或 service pack 時,安裝程式可能會提示您輸入 RTM 媒體。 若要解決此問題,請在修補程式移除過程中提供 RTM 媒體路徑。

參考