如何還原遺失的 Windows 安裝程式快取檔案,並解決在 SQL Server 更新期間發生的問題

文章翻譯 文章翻譯
文章編號: 969052 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

徵狀


本文中所述的程序是要提供緊急洩壓並不永久修正檔。使用此緊急的程序的客戶應該驗證依照知識庫文件中的指示,請使用Windows 安裝程式快取檢查器封裝其 Windows 安裝程式快取 2667628。

當您嘗試安裝 Microsoft SQL Server 服務套件或累積的更新時,您可能會遇到下列的錯誤訊息可能表示 Windows 安裝程式快取發生問題。Windows 安裝程式快取位於c:\windows\installer資料夾中儲存重要應用程式檔案安裝使用Windows Installer 技術,而且不應該刪除。如果安裝程式快取已遭洩露,您可能會不立即請參閱問題直到您執行某個動作,例如解除安裝、 修復或更新 SQL Server。

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

Microsoft 建議的 SQL Server 安裝您第一次使用這些文件所述的修復程序來確認您目前的安裝:
附註在事件記錄檔或安裝記錄檔位於下列資料夾中的一個,表示您應該修復受影響您正在進行進一步的執行個體中,您可以找到下列的錯誤訊息以文字訊息:
  • 對於 SQL Server 2008年與 SQL Server 2008 R2 的:
    C:\Program 必要 SQL Server\100\Setup 啟動安裝程式
  • 對於 SQL Server 2012年:
    C:\Program 必要 SQL Server\110\Setup 啟動安裝程式

SQL 2005 (所有分支)
摺疊此表格展開此表格
產品版本安裝程式封裝 (MSI) 遺漏時的錯誤訊息安裝程式快取封裝 (MSP) 遺漏時的錯誤訊息
SQL 2005 Server
1636 無法安裝,Windows 安裝程式 MSI 檔案
1636 無法安裝,Windows 安裝程式 MSP 檔案
附註:您必須檢閱安裝記錄檔,以指出是否任何快取檔案已遺失。如需有關如何執行這項操作的詳細資訊,請移至 〈 解決方案 〉 一節。

SQL Server 2008 sp1
摺疊此表格展開此表格
產品版本安裝程式封裝 (MSI) 遺漏時的錯誤訊息安裝程式快取封裝 (MSP) 遺漏時的錯誤訊息
SQL Server 2008 SP1沒有錯誤訊息
標題: SQL Server 安裝程式失敗。
------------------------------
SQL Server 安裝程式發現下列錯誤: 無法開啟修補檔案。檔案是: c:\WINNT\Installer\1cf506f.msp。錯誤碼 0x84B20001。
------------------------------
僅限建置的 SQL Server 2008 SP3 的 (CU/GDR 分支並不適用)
摺疊此表格展開此表格
產品版本安裝程式封裝 (MSI) 遺漏時的錯誤訊息安裝程式快取封裝 (MSP) 遺漏時的錯誤訊息
SQL Server 2008 SP3
找不到快取的 MSI 檔案 'C:\Windows\Installer\2775c8.msi'。它原來的檔案是 'sql_engine_core_inst.msi',它已安裝產品 'Microsoft SQL Server 2008年資料庫引擎服務' 從 '<network path="">',版本 '10.3.5500.0' 語言 'ENU'。</network>
找不到快取的補充程式檔案"C:\Windows\Installer\19b19196.msp"。此快取檔案的原始檔是 「 sql_engine_core_inst.msp 」,可以從 「 Service Pack 3 的 SQL Server 2008 (KB2546951) (64 位元) 」,版本 10.3.5500.0 安裝
附註當您執行升級時,您會收到下列錯誤訊息:
摺疊此圖像展開此圖像
SQL Server 錯誤


對於 SQL Server 2008 R2 SP1 只 (CU/GDR 分支並不適用)
摺疊此表格展開此表格
產品版本安裝程式封裝 (MSI) 遺漏時的錯誤訊息安裝程式快取封裝 (MSP) 遺漏時的錯誤訊息
SQL Server 2008 R2 SP1
標題: SQL Server 安裝程式失敗。
------------------------------
SQL Server 安裝程式發現下列錯誤: C:\Windows\Installer\932b909.msi。
------------------------------
找不到快取的補充程式檔案"C:\Windows\Installer\105441.msp"。此快取檔案的原始檔是 「 sql_engine_core_inst_loc.msp 」,可從 「 Service Pack 1 的 SQL Server 2008 R2 (KB2528583) (64 位元) 」 安裝,版本 10.51.2500.0。
附註當您執行升級時,您會收到下列錯誤訊息:
摺疊此圖像展開此圖像
SQL Server 錯誤


SQL Server 2008 R2 sp2
摺疊此表格展開此表格
產品版本安裝程式封裝 (MSI) 遺漏時的錯誤訊息安裝程式快取封裝 (MSP) 遺漏時的錯誤訊息
SQL Server 2008 R2 SP1
找不到快取的 MSI 檔案 'C:\Windows\Installer\932b909.msi'。它原來的檔案是 'sql_engine_core_inst.msi',它已安裝產品 'SQL Server 2008 R2 SP1 資料庫引擎服務' 從 '<network path="">',版本 '10.51.2500.0' 語言 'ENU'。</network>
找不到快取的補充程式檔案"C:\Windows\Installer\105441.msp"。此快取檔案的原始檔是 「 sql_engine_core_inst_loc.msp 」,可從 「 Service Pack 1 的 SQL Server 2008 R2 (KB2528583) (64 位元) 」 安裝,版本 10.51.2500.0。
附註當您執行升級時,您會收到下列錯誤訊息:
摺疊此圖像展開此圖像
SQL Server 錯誤


對於 SQL Server 2012 之前 CU2
沒有遺漏 MSP 或 MSI 檔案的訊息。不過,安裝程式記錄檔會記錄錯誤代碼 1714年。

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

在 Detail.txt 檔案:
<Date><Time>Slp: Sco: 檔案 'd:\2d5feb4dd893c4adee47f15661ac\1033_ENU_LP\x64\setup\sqlsupport_msi\x64\SqlSupport.msi' 不存在
<Date><Time>Slp: Sco: 檔案 'd:\2d5feb4dd893c4adee47f15661ac\1033_ENU_LP\x64\setup\sqlsupport_msi\x64\SqlSupport.msi' 不存在
<Date><Time>Slp: 檢查點: PREINSTALL_SQLSUPPORT_CPU64_ACTION
<Date><Time>Slp: Sco: 嘗試建立基底的登錄機碼作用中計,機器<Server name="">
<Date><Time>Slp: Sco: 嘗試開啟登錄子機碼 Software\Microsoft\Windows\CurrentVersion\Installer
<Date><Time>Slp: Sco: 嘗試取得登錄值 InstallerLocation
<Date><Time>Slp: Windows 安裝程式版本: 5.0.7601.17514
<Date><Time>Slp: Sco: 等待服務 'msiserver' 接受停止要求。
<Date><Time>Slp: Sco: 嘗試開啟 SC 管理員
<Date><Time>Slp: Sco: 嘗試開啟服務 msiserver 的服務控制代碼
<Date><Time>Slp: 叫用 QueryServiceStatus Win32 API
<Date><Time>Slp: Sco: 嘗試關閉服務 msiserver 的服務控制代碼
<Date><Time>Slp: Sco: 嘗試關閉 SC 管理員
<Date><Time>Slp: 目標封裝: 「 d:\2d5feb4dd893c4adee47f15661ac\1033_ENU_LP\x64\setup\sqlsupport_msi\SqlSupport.msi 」
<Date><Time>Slp: MSI 錯誤: 無法移除舊版本的 Microsoft SQL Server 2012年安裝 (英文) 的 1714年。請連絡技術支援人員。
<Date><Time>Slp: InstallPackage: MsiInstallProduct 傳回結果碼 1603年。
<Date><Time>Slp: 使用 MSI 錯誤程式碼來偵測重試] 選項: 1714年
<Date><Time>Slp: 沒有可重試的 MSI 傳回偵測到程式碼。</Time></Date></Time></Date></Time></Date></Time></Date></Time></Date></Time></Date></Time></Date></Time></Date></Time></Date></Time></Date></Time></Date></Time></Date></Time></Date></Time></Date></Server></Time></Date></Time></Date></Time></Date></Time></Date>

SQL Server 2012 CU2 (以及任何後續 CU 或預存程序)
摺疊此表格展開此表格
產品版本安裝程式封裝 (MSI) 遺漏時的錯誤訊息安裝程式快取封裝 (MSP) 遺漏時的錯誤訊息
SQL Server 2008 R2 SP1
快取的 MSI 檔案 'C:\Windows\Installer\<file_encoded_name>.msi' 遺失。它原來的檔案是 'C:\Windows\Installer\sql_<featurename>.msi '}' 和它已安裝產品' Microsoft SQL Server <version>''C:\originalfolder' 從版本'<versionnumber>',語言 '<language>'。</language> </versionnumber> </version> </featurename> </file_encoded_name>
找不到快取的補充程式檔案"c:\Windows\Installer\1fdb1aec.msp"。它原來的檔案是"sql_engine_core_inst.msp",它可以從 「 重要修正 2316年的 SQL Server 2012 (KB2679368) (64 位元) 」,版本 11.00.2100.60.The 快取的補充程式檔案安裝 」 C:\Windows\Installer\<file_encoded_name>.msp' 遺失。它原來的檔案是 'C:\Windows\Installer\sql_<featurename>.msp'}',它可以從安裝' Hotfix<number>的 SQL Server 2012年<KB number="">',版本 '<versionnumber>'。</versionnumber> </KB> </number> </featurename> </file_encoded_name>

發生的原因

當 Windows 安裝程式資料庫檔案 (.msi) 的 Windows 安裝程式修補檔案 (.msp) 找不到或從 Windows 安裝程式快取時,可能會發生這些問題。Windows 安裝程式快取位於下列資料夾:
%windir%\installer
藉由使用 Windows Installer 安裝產品時,原始的.msi 檔案的等量的版本會儲存在 Windows 安裝程式快取中。每次更新的產品,例如 hotfix、 累積的更新或服務套件安裝程式,也會將相關的.msp 或.msi 檔案儲存在 Windows 安裝程式快取。

任何未來的更新,例如 hotfix、 累積的更新或服務套件安裝程式,產品會依賴儲存在 Windows 安裝程式快取中的檔案中的資訊。沒有此資訊,新的更新程式無法執行所需的轉換。

解決方案

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

程序 1: 使用指令碼

若要完成此程序中的步驟,您必須複製 FindSQLInstalls.vbs 指令碼 從本機電腦上的資料夾您嘗試更新您的 SQL Server 安裝 〈 其他資訊 〉 一節。

附註FindSQLInstalls.vbs 指令碼會收集的資訊,若要修正無效的套件路徑。而且,此指令碼用於針對來源位置請確定所有的 MSP 套件是在 Windows 安裝程式快取目錄中。如果使用原始的來源媒體,將會重新加入任何遺漏的套件。

若要解決這些問題,使用指令碼,請依照下列步驟執行:
  1. 找出您儲存指令碼內容的目錄。
  2. 開啟提升權限的命令提示字元,目錄已儲存指令碼,並執行下列命令:
    Cscript FindSQLInstalls.vbs %computername%_sql_install_details.txt
  3. 開啟文字編輯器,例如 [記事本] 中的步驟 2 中的檔案,並找出造成失敗的問題。若要執行這項操作,搜尋字串模式,如下所示的文字檔案:
    • 不這樣做
    • !!!
  4. 根據步驟 3 中的結果,採取所需的步驟。

    附註如需有關 「 範例 」 一節中步驟的外觀。

  5. 重複步驟 2 到 4,直到在步驟 2 中建立文字檔案不再含有參考無效的路徑或遺失的檔案,為正在更新元件的文字。

範例

下列範例是項目和執行 FindSQLInstalls.vbs 指令碼時產生的輸出檔中所列出的動作的說明。

範例 1: 安裝程式檔案遺失
以下是輸出的您遺失的 Windows 安裝程式快取資料夾中的.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 或 DVD 磁碟機 g。如果安裝發生從檔案資料夾或網路共用,"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\ 

「 動作需要 」 線條會顯示必須存在,才能更新原始的安裝媒體的遺失檔案的完整路徑:
Installer Cache File: C:\WINDOWS\Installer\19b4d2.msi 

「 安裝程式快取檔案 」 行確認安裝程式快取檔案的名稱:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!! C:\WINDOWS\Installer\19b4d2.msi DOES NOT exist in the Installer cache. !!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

下一節的輸出會提示您解決遺失的檔案所需的動作:
 Action needed, recreate or re-establish path to the directory:
     G:\x64\setup\sql_engine_core_inst_msi\then rerun this script to update installer cache and results
     The path on the line above must exist at the root location to resolve
     this problem with your msi/msp file not being found or corrupted,
     In some cases you may need to manually copy the missing file or manually
     replace the problem file overwriting it is exist: 
 
     Copy "G:\x64\setup\sql_engine_core_inst_msi\sql_engine_core_inst.msi" C:\WINDOWS\Installer\19b4d2.msi
 
     Replace the existing file if prompted to do so.
範例 2: 遺漏的修補程式
遺漏的修補程式可能會導致類似範例 1] 中的項目。大多數情況下,您會注意到在 「 補充程式 LastUsedSource"行中參照的補充程式的項目,此行如下所示:
Patch LastUsedSource:   n;1;c:\0ca91e857a4f12dd390f0821a3\HotFixSQL\Files\

此輸出會指示下列有關補充程式安裝:
  • 原始的更新程式已安裝藉由連按兩下補充程式的可執行檔。
  • 補充程式的安裝程式會將暫存資料夾中,c:\0ca91e857a4f12dd390f0821a3,用於安裝此更新程式。
  • 若要重新建立路徑,您必須執行相同的可執行檔,並加入下列參數:
    /x:c:\0ca91e857a4f12dd390f0821a3
    附註這個命令會強制的上一個遺失的位置,將檔案解壓縮的可執行檔,並重新建立,才能使用任何遺失的檔案來更新 Windows 安裝程式快取的結構。實際的位置而異,和單一的補充程式,如服務封包可能要解壓縮至多個位置。每個已安裝的產品包含區段,其中包含 「 補充程式已安裝 」 的下列資訊:
    Display name:
    KB Article URL:  http://support.microsoft.com/?kbid=<value>
    Patch LastUsedSource: 

    「 KB 文件 URL 」 列可協助您下載任何更新程式的媒體,如果這是必要的。

程序 2: 以手動方式還原檔案

若要以手動方式還原從 Windows 安裝程式快取遺失的檔案,請依照下列步驟執行:
  1. 從錯誤訊息、 安裝記錄檔,或由 Windows 「 安裝程式維護的登錄項目,請收集有關遺失的檔案的完整詳細資料。例如,「 徵狀 」 一節中的錯誤訊息 1,如果要解決這個問題所需的所有資訊都在於錯誤訊息:
    • PatchName:"Hotfix 1702 的 SQL Server 2008 R2 (KB981355) (64 位元)"
    • 原始的更新程式所使用的 MSP 檔案: sql_engine_core_inst.msp
    • 快取的 MSP 檔案: c:\Windows\Installer\1fdb1aec.msp
  2. 如果您不需要的所有詳細資料,請參閱 」 的程序 2 」 一節的步驟來收集這些詳細資料的詳細資訊。
  3. 請造訪 http://support.microsoft.com並搜尋此補充程式相關聯的知識庫文件。在這個範例中,您必須搜尋 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 安裝程式快取:
    %windir%\installer\
  8. 原始的 msp 檔案,sql_engine_core_inst.msp,重新命名為下列名稱:
    快取的 msp 檔案 1fdb1aec.msp

您可以啟動安裝程式導致錯誤的更新程式,並繼續更新程序。您可能遇到此訊息的遺失的 Windows 安裝程式快取檔案為另一個元件或相同產品的另一個更新。

若要取得的所有 Windows 安裝程式快取檔案遺失與 SQL Server 產品元件相關的清單,您可以下載 〈 其他資訊 〉 一節所述的 SQL Server 2008 R2 BPA 工具。

如果錯誤訊息參照遺失的 Windows 安裝程式資料庫檔案 (.msi),您不需要執行步驟 2 到 4。相反地,您可以直接跳到步驟 5。您必須找出您用來安裝產品的原始媒體從.msi。如果此錯誤訊息所產生的 sql_engine_core_inst.msi,您就必須找出這個檔案從安裝媒體,在下列資料夾結構:
\x64\setup\sql_engine_core_inst_msi\
其他步驟是相同的。

詳細資訊的程序 2

如何尋找遺失的.msp 檔案的補充程式套件和產品詳細資料
不同版本的產品產生這個問題的不同的錯誤訊息。「 徵狀 〉 一節所述的錯誤訊息會出現啟動 Microsoft SQL Server 2008 sp1 更新的安裝程式。其他更新,您會收到錯誤訊息,可能無法清楚地指定哪些補充程式檔案遺失了,Windows 安裝程式快取與特定更新程式詳細資料。這些錯誤訊息,安裝程式記錄檔會包含遺失的 Windows 安裝程式快取檔案的相關資訊。範例安裝程式記錄檔類似下列:
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


遺失的.msp 檔案,Windows 安裝程式快取中找到更多詳細資料,請依照下列步驟執行:
  1. 搜尋下列的 Windows 安裝程式修補程式登錄子機碼中遺失的.msp 檔案:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Patches\
  2. 尋找補充程式的 GUID。
  3. 搜尋下列的 Windows 安裝程式產品登錄子機碼中的補充程式 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
名稱: 顯示名稱
SQL Server 資料庫服務 2005 ENU (KB932555) 的資料: GDR 2050

現在您有開始步驟來解決遺失的檔案,Windows 安裝程式快取中的所有資訊點。

附註如果您使用 Microsoft SQL Server 2008 Service Pack 3 (SP3) 或更新的版本,您也可以接收類似的錯誤訊息的遺失的.msi 檔案。藉由使用這項錯誤訊息,您可以快速判定哪個檔案遺失,要下載,哪些服務套件,您可以在何處下載。

如需有關如何取得 service pack 的詳細資訊,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
2546951 SQL Server 2008 Service Pack 3 中所修正的 bug 清單

其他相關資訊

如需有關 Windows 安裝程式資料庫 (.msi) 檔案的詳細資訊,請造訪下列 Microsoft 開發人員網路 (MSDN) 網站:
安裝程式資料庫
如需有關 Windows 安裝程式修補程式 (.msp 檔案) 檔案的詳細資訊,請造訪下列 MSDN 網站:
補充程式套件
如需有關 Windows 安裝程式快取的內部詳細資料的詳細資訊,請參閱下列 MSDN 部落格:
Windows 安裝程式快取
如需有關修補程序的詳細資訊,請參閱下列 MSDN 部落格:
修補程式的運作方式
如需有關如何確定您快取正確的平台的補充程式檔案的詳細資訊,請參閱下列 MSDN 部落格:
SQL Server 安裝程式會提示與 「 已安裝的產品與安裝來源不相符 」
如需有關為何使用 Windows 安裝程式的任何產品可會遇到這個問題的詳細資訊,請參閱下列 MSDN 部落格:
重建安裝程式快取
如需有關不同組的安裝程式記錄檔中出現的錯誤訊息的詳細資料的詳細資訊,請參閱下列 MSDN 部落格:
-第一部份: SQL Server 2005 補充程式無法安裝因發生錯誤 「 無法安裝,Windows Installer MSP 檔案"


如需有關產品或自動檢查這個條件,SQL Server 產品的版本和您的 SQL Server 的執行個體上的工具的詳細資訊,請參閱下表:
摺疊此表格展開此表格
規則軟體規則標題規則描述針對規則進行評估的產品版本
SQL Server 2008 R2 最佳練習分析器 (SQL Server 2008 R2 BPA)安裝程式-安裝程式快取遺漏 SQL 安裝SQL Server 2008 R2 最佳練習分析器 (SQL Server 2008 R2 BPA) 提供規則,以偵測遺漏的安裝程式快取檔案,SQL Server 元件。SQL Server 2008 R2 BPA 支援 SQL Server 2008年,以及 SQL Server 2008 R2。如果您執行 BPA 工具,並發生錯誤的安裝程式-標題與 SQL 安裝,安裝程式快取遺漏,然後快取檔案已遺失快取資料夾中。SQL Server 2008
SQL Server 2008 R2
SQL Server 2012年最佳練習分析器 (SQL Server 2012 BPA)安裝程式-安裝程式快取遺漏 SQL 安裝SQL Server 2012年最佳練習分析器 (SQL Server 2012 BPA) 提供規則,以偵測遺漏的安裝程式快取檔案,SQL Server 元件。如果您執行 BPA 工具,並發生錯誤的安裝程式-標題與 SQL 安裝,安裝程式快取遺漏,然後快取檔案已遺失快取資料夾中。SQL Server 2012



FindSQLInstalls.vbs 指令碼

' Copyright ? Microsoft Corporation.  All Rights Reserved.
' This code released under the terms of the 
' Microsoft Public License (MS-PL, http://opensource.org/licenses/ms-pl.html.)
 
 
On Error Resume Next
 
Dim arrSubKeys, arrSubKeys2
Dim objFSO, objShell, objFile, objReg, objConn, objExec
Dim strComputer, strKeyPath, strNewSource
Dim strWorkstationName, strDBPath, strSubKey, strSubKey2(), strKeyPath02,  strRetValue00
Dim strRetValue01, strRetValue02, strRetValNew02, strRetValNew03, strRetValNew04, strRetValNew05, strRetValNew06, strRetValNew07, strRetValNew08, strRetValNew09, strRetValue10, strRetValNew10, strRetValNew11, strRetValNew12, strRetValNew13, strRetValNew14, strRetValNew14a, strRetValNew14b, strRetValNew15, strRetValNew15a, strRetValNew15b, strRetValNew16, strRetValNew17, strRetValNew18
 
Const HKCR = &H80000000 'HKEY_CLASSES_ROOT
Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
Const ForReading = 1, ForWriting = 2, ForAppEnding = 8
 
' Checking for Elevated permissions
Dim oShell, oExec
szStdOutszStdOut = ""
Set oShell = CreateObject("WScript.Shell")
Set oExec = oShell.Exec("whoami /groups")
 
Do While (oExec.Status = cnWshRunning)
    WScript.Sleep 100
       if not oExec.StdOut.AtEndOfStream Then
                szStdOut = szStdOut & oExec.StdOut.ReadAll
       end If
Loop
 select case oExec.ExitCode
   case 0
       if not oExec.StdOut.AtEndOfStream Then
           szStdOut = szStdOut & oExec.StdOut.ReadAll
       End If
       If instr(szStdOut,"Mandatory Label\High Mandatory Level") Then
                wscript.echo "Elevated, executing script and gathering requested data"
       Else
           if instr(szStdOut,"Mandatory Label\Medium Mandatory Level")  Then
          Wscript.echo "Not Elevated must run from Administrative commmand line."
       Else
          Wscript.echo "Gathering requested data..."
           end If
      End If
   case Else
       if not oExec.StdErr.AtEndOfStream Then
          wscript.echo oExec.StdErr.ReadAll
       end If
       end select
 
'
' Leaving strNewSource will result in no search path updating.
' Currently DO NOT EDIT these.
strNewSource = ""
strNewRTMSource = ""
 
' Define string values
strComputer = "."
strSQLName = "SQL"
strDotNetName = ".NET"
strVStudioName = "Visual Studio"
strXML = "XML"
strOWC = "Microsoft Office 2003 Web Components"
strKeyPath = "Installer\Products"
strKeyPath2 = "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products"
strNValue00 = "ProductName"
strNValue01 = "PackageName"
strNValue02 = "LastUsedSource"
strNValue03 = "InstallSource"
strNValue04 = "LocalPackage"
strNValue05 = "DisplayVersion"
strNValue06 = "InstallDate"
strNValue07 = "UninstallString"
strNValue08 = "PackageCode"
strNValue09 = "MediaPackage"
strNValue10 = "InstallSource"
strNValue11 = "AllPatches"
strNValue12 = "NoRepair"
strNValue13 = "MoreInfoURL"
strNValue14 = "PackageName"
strNValue15 = "LastUsedSource"
strNValue16 = "Uninstallable"
strNValue17 = "DisplayName"
strNValue18 = "Installed"
 
If WScript.arguments.count <> 1 Then
   WScript.echo "Usage: cscript " & WScript.scriptname & " outputfilename.txt"
   WScript.quit
End If
 
'--Setup the output file
Set fso = CreateObject("Scripting.FileSystemObject")
Set txtFile = fso.OpenTextFile(WScript.arguments(0), ForWriting, True)
If err.number <> 0 Then
    WScript.echo "Error 0x" & myHex(err.number,8) & ": " & err.source & " - " & err.description
    WScript.quit
End If
 
txtFile.writeline "Products installed on the local system"
txtFile.writeline " "
txtFile.writeline " "
 
 
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = WScript.CreateObject("WScript.Shell")
 
'--Set up the registry provider.
Set objReg = GetObject("winmgmts:\\" & strComputer & _
"\root\default:StdRegProv")
 
Set wiInstaller = CreateObject("WindowsInstaller.Installer")
 
'--Enumerate the "installer\products" key on HKCR
objReg.EnumKey HKCR, strKeyPath, arrSubKeys
 
For Each strSubKey In arrSubKeys
 
' Define the various registry paths
strProduct01 = "Installer\Products\" & strSubKey
strKeyPath02 = "Installer\Products\" & strSubKey & "\SourceList"
strKeyPath03 = "Installer\Products\" & strSubKey & "\SourceList\Media"
strInstallSource = "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\" & strSubKey & "\InstallProperties\"
strInstallSource2 = "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\" & strSubKey & "\patches\"
strInstallSource3 = "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Patches"
strInstallSource5 = "SOFTWARE\Classes\Installer\Patches\"
strInstallSource6 = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
strInstallSource7 = "SOFTWARE\Microsoft\Microsoft SQL Server\"
strInstallSource8 = "SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server\"
 
' Pull the intial values
objReg.GetStringValue HKCR, strProduct01, strNValue00, strRetValue00
objReg.GetStringValue HKCR, strKeyPath02, strNValue01, strRetValue01
objReg.GetStringValue HKCR, strKeyPath02, strNValue02, strRetValue02
strRetValNew02 = Mid(strRetValue02, 5)
objReg.GetStringValue HKCR, strKeyPath03, strNValue09, strRetValue09
strRetValue10 = strNewRTMSource & strRetValue09
objReg.GetStringValue HKLM, strInstallSource, strNValue03, strRetValNew03
objReg.GetStringValue HKLM, strInstallSource, strNValue04, strRetValNew04
objReg.GetStringValue HKLM, strInstallSource, strNValue05, strRetValNew05
objReg.GetStringValue HKLM, strInstallSource, strNValue06, strRetValNew06
objReg.GetStringValue HKLM, strInstallSource, strNValue07, strRetValNew07
objReg.GetStringValue HKLM, strInstallSource, strNValue10, strRetValNew10
objReg.GetStringValue HKLM, strInstallSource, strNValue12, strRetValNew12
objReg.GetStringValue HKLM, strInstallSource, strNValue13, strRetValNew13
objReg.GetStringValue HKLM, strInstallSource2, strNValue11, strRetValNew11
 
' Pull the Product Code from the Uninstall String
strProdCode = strRetValNew07
  ProdCodeLen = Len(strProdCode)
  ProdCodeLen = ProdCodeLen - 14
strRetValNew08 = Right(strProdCode, ProdCodeLen)
 
' Pull out path from LastUsedSource
strGetRealPath = strRetValue02
  GetRealPath = Len(strRetValue02)
strRealPath = Mid(strRetValue02, 5, GetRealPath)
 
' Identifie the string in the ProductName
If instr(1, strRetValue00, strSQLName, 1) Then
' Start the log output
    txtFile.writeline "================================================================================"
    txtFile.writeline "PRODUCT NAME   : " & strRetValue00
    txtFile.writeline "================================================================================"
    txtFile.writeline "  Product Code: " & strRetValNew08
    txtFile.writeline "  Version     : " & strRetValNew05
    txtFile.writeline "  Most Current Install Date: " & strRetValNew06
    txtFile.writeline "  Target Install Location: "  & strRetValNew13
    txtFile.writeline "  Registry Path: "
    txtFile.writeline "   HKEY_CLASSES_ROOT\" & strKeyPath02
    txtFile.writeline "     Package    : " & strRetValue01
    txtFile.writeline "  Install Source: " & strRetValue10
    txtFile.writeline "  LastUsedSource: " & strRetValue02
'   txtFile.writeline "Does this file on this path exist? " & strRetValNew02 & "\" & strRetValue01
    If fso.fileexists(strRetValNew02 & "\" & strRetValue01) Then
    txtFile.writeline  " "
        txtFile.writeline "    " & strRetValue01 & " exists on the LastUsedSource path, no actions needed."
    Else
        txtFile.writeline " "
        txtFile.writeline " !!!! " & strRetValue01 & " DOES NOT exist on the path in the path " & strRealPath & " !!!!"
        txtFile.writeline " "
        txtFile.writeline " Action needed, re-establish the path to " & strRealPath
' Placeholder for altering the LastUsedSource by adding source location and Forcing search of list
'        If strNewSource <> "" Then
'        txtFile.writeline "      New Install Source Path Added: " & strNewSource
'        wiInstaller.AddSource strRetValNew08, "", strNewSource
'        Else
'        If strNewRTMSource <> "" Then
'        wiInstaller.AddSource strRetValNew08, "", strNewRTMSource
'        txtFile.writeline "      Forcing SourceList Resolution For: " & strRetValNew08
'        wiInstaller.ForceSourceListResolution strRetValNew08, ""
'        End If
'        End If
    End If
        txtFile.writeline " "
        txtFile.writeline "Installer Cache File: " & strRetValNew04
    If fso.fileexists(strRetValNew04) Then
        txtFile.writeline " "
        txtFile.writeline "    Package exists in the Installer cache, no actions needed."
        txtFile.writeline "    Any missing packages will update automatically if needed assuming that"
        txtFile.writeline "    the LastUsedSource exists."
        txtFile.writeline " "
        txtFile.writeline "    Should you get errors about " & strRetValNew04 & " or " & strRealPath & strRetValue01 & " then you"
        txtFile.writeline "    may need to manually copy the file, if file exists replace the problem file, " 
        txtFile.writeline "    Copy and paste the following command line into an administrative command prompt:"
        txtFile.writeline " "
        txtFile.writeline "     Copy " & chr(34) & strRealPath  & strRetValue01 & chr(34) & " " &strRetValNew04
        txtFile.writeline " "
    ElseIf fso.fileexists(strRetValNew02 & "\" & strRetValue01) Then
              fso.CopyFile strRetValNew02 & "\" & strRetValue01, strRetValNew04
        If fso.fileexists(strRetValNew04) Then
          txtFile.writeline " "
          txtFile.writeline "     Missing cache file replaced by copying " & strRealPath  & strRetValue01 & " to " & strRetValNew04
          txtFile.writeline "     Previously missing package " & strRetValNew04 &  " now exists in the Installer cache."
          txtFile.writeline " "
        End If
    Else
        txtFile.writeline " "
        txtFile.writeline " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
        txtFile.writeline " !!!! " & strRetValNew04 & " DOES NOT exist in the Installer cache. !!!!"
        txtFile.writeline " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
        txtFile.writeline " "
        txtFile.writeline "     Action needed, recreate or re-establish path to the directory:"
        txtFile.writeline "       " & strRealPath & "then rerun this script to update installer cache and results"
        txtFile.writeline "     The path on the line above must exist at the root location to resolve"
        txtFile.writeline "     this problem with your msi/msp file not being found or corrupted,"
        txtFile.writeline "     In some cases you may need to manually copy the missing file or manually"
        txtFile.writeline "     replace the problem file overwriting it is exist: " 
        txtFile.writeline " "
        txtFile.writeline "     Copy " & chr(34) & strRealPath  & strRetValue01 & chr(34) & " " &strRetValNew04
        txtFile.writeline " "
        txtFile.writeline "     Replace the existing file if prompted to do so."
        txtFile.writeline " "
    End If
    txtFile.writeline " "
    txtFile.writeline strRetValue00 & " Patches Installed "
    txtFile.writeline "--------------------------------------------------------------------------------"
 
    err.clear
    objReg.EnumKey HKLM, strInstallSource2, arrSubKeys2
    uUpperBounds = UBound(arrSubKeys2,1)
     If err.number = 0  Then
        For Each strSubKey2 in arrSubKeys2
    '    WScript.echo "value = " & strSubKey2
 
strKeyPath04 = "Installer\Patches\" & strSubKey2 & "\SourceList"
 
     objReg.GetDWORDValue HKLM, strInstallSource2 & "\" & strSubKey2 & "\", strNValue16, strRetValue16
     objReg.GetStringValue HKCR, strKeyPath04, strNValue15, strRetValue15a
     objReg.GetStringValue HKCR, strKeyPath04, strNValue14, strRetValue14a
     objReg.GetStringValue HKCR, strKeyPath02, strNValue15, strRetValue15b
     objReg.GetStringValue HKCR, strKeyPath02, strNValue14, strRetValue14b
     objReg.GetStringValue HKLM, strInstallSource2 & "\" & strSubKey2 & "\", strNValue17, strRetValue17
     objReg.GetStringValue HKLM, strInstallSource2 & "\" & strSubKey2 & "\", strNValue18, strRetValue18
     objReg.GetStringValue HKLM, strInstallSource2 & "\" & strSubKey2 & "\", strNValue13, strRetValue13a
     objReg.GetStringValue HKLM, strInstallSource3 & "\" & strSubKey2 & "\", strNValue04, strRetValue04a
 
' Pull the URL from the MoreInfoURL String
strMoreInfoURL = strRetValue13a
  MoreInfoURLLen = Len(strMoreInfoURL)
strRetValue13b = Right(strMoreInfoURL, 42)
 
' Pull the URL from the LastUsedPath String
strLastUsedPath = strRetValue15a
  LastUsedPathLen = Len(strLastUsedPath)
  'LastUsedPathLen = LastUsedPathLen - 15
strRetValue15c = Mid(strLastUsedPath, 5)
 
      txtFile.writeline " Display Name:    " & strRetValue17 
      txtFile.writeline " KB Article URL:  " & strRetValue13b
      txtFile.writeline " Install Date:    " & strRetValue18 
              txtFile.writeline "   Uninstallable:   " & strRetValue16 
      txtfile.writeline " Patch Details: "
      txtFile.writeline "   HKEY_CLASSES_ROOT\Installer\Patches\" & strSubKey2
              txtFile.writeline "   PackageName:   " & strRetValue14a
' Determine if someone has modified the Uninstallable state from 0 to 1 allowing possible unexpected uninstalls
              txtFile.writeline "    Patch LastUsedSource: " & strRetValue15a 
              txtFile.writeline "   Installer Cache File Path:     " & strRetValue04a 
        txtFile.writeline "     Per " & strInstallSource3 & "\" & strSubKey2 & "\" & strNValue04
              mspFileName = (strRetValue15c  & strRetValue14a)
      If strRetValue14a <> "" Then
      If fso.fileexists(strRetValue04a) Then
        txtFile.writeline " "
        txtFile.writeline "    Package exists in the Installer cache, no actions needed."
        txtFile.writeline "    Package will update automatically if needed assuming that"
        txtFile.writeline "    the LastUsedSource exists."
        txtFile.writeline " "
        txtFile.writeline "    Should you get errors about " & strRetValue04a & " or " & strRetValue15c  & strRetValue14a & " then you"
        txtFile.writeline "    may need to manually copy missing files, if file exists replace the problem file, " 
        txtFile.writeline "    Copy and paste the following command line into an administrative command prompt."
        txtFile.writeline " "
        txtFile.writeline "     Copy " & chr(34) & strRetValue15c  & strRetValue14a & chr(34) & " " & strRetValue04a
        txtFile.writeline " "
      ElseIf fso.fileexists(mspFileName) Then
              fso.CopyFile mspFileName, strRetValue04a
          If fso.fileexists(strRetValue04a) Then
          txtFile.writeline " "
          txtFile.writeline " Missing cache file replaced by copying " & strRetValue15c  & strRetValue14a & " to " & strRetValue04a
          txtFile.writeline " Previously missing package " & strRetValNew04 &  " now exists in the Installer cache."
          txtFile.writeline " "
          End If
'        End If
      Else
        txtFile.writeline " "
        txtFile.writeline "!!!! " & strRetValue04a & " package DOES NOT exist in the Installer cache. !!!!"
        txtFile.writeline " "
        txtFile.writeline "     Action needed, recreate or re-establish path to the directory:"
        txtFile.writeline "       " & strRetValue15c & " then rerun this script to update installer cache and results"
        txtFile.writeline "     The path on the line above must exist at the root location to resolve"
        txtFile.writeline "     this problem with your msi/msp file not being found or corrupted,"
        txtFile.writeline "     In some cases you may need to manually copy missing files or manually"
        txtFile.writeline "     replace the problem file, " 
        txtFile.writeline " "
        txtFile.writeline "     Copy " & chr(34) & strRetValue15c  & strRetValue14a & chr(34) & " " & strRetValue04a
        txtFile.writeline " "
        txtFile.writeline "     Replace the existing file if prompted to do so."
        txtFile.writeline " "
        txtFile.writeline "     Use the following URL to assist with downloading the patch:"
        txtFile.writeline "      " & strRetValue13b
        txtFile.writeline " "
        txtFile.writeline " "
      End If
       Else
        txtFile.writeline " "
     End If
        next
     Else
        txtfile.writeline " "
        txtfile.Writeline "  No Patches Found"
        txtfile.writeline " "
    End If
 
    End If
 
 
Next
txtFile.Close
Set txtFile = Nothing
Set fso = Nothing

屬性

文章編號: 969052 - 上次校閱: 2013年10月22日 - 版次: 13.0
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Enterprise Evaluation
  • Microsoft SQL Server 2008 Express
  • Microsoft SQL Server 2008 Express with Advanced Services
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Standard Edition for Small Business
  • Microsoft SQL Server 2008 Web
  • Microsoft SQL Server 2008 Workgroup
  • Microsoft SQL Server 2008 R2 Datacenter
  • Microsoft SQL Server 2008 R2 Developer
  • Microsoft SQL Server 2008 R2 Enterprise
  • Microsoft SQL Server 2008 R2 Express
  • Microsoft SQL Server 2008 R2 Express with Advanced Services
  • Microsoft SQL Server 2008 R2 Standard
  • Microsoft SQL Server 2008 R2 Standard Edition for Small Business
  • Microsoft SQL Server 2008 R2 Web
  • Microsoft SQL Server 2008 R2 Workgroup
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Evaluation Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Express Edition with Advanced Services
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
  • Microsoft SQL Server 2012 Developer
  • Microsoft SQL Server 2012 Enterprise
  • Microsoft SQL Server 2012 Express
  • Microsoft SQL Server 2012 Standard
  • Microsoft SQL Server 2012 Web
關鍵字:?
kbtshoot kbexpertiseinter kbprb kbsurveynew kbmt KB969052 KbMtzh
機器翻譯
請注意--重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,且可能由 Microsoft Community 利用 Community Translation Framework技術或人工進行事後編修。翻譯過程並無專業譯者參與。Microsoft 同時提供使用者人為翻譯、機器翻譯及社群編修後的機器翻譯三種版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,所有翻譯文章都可能不盡完美,內容都可能出現詞彙、語意或文法上的錯誤。就翻譯內容之不正確或錯誤,或客戶因使用翻譯內容所產生的任何損害,微軟不負擔任何責任。Microsoft將依合理的商業努力不斷地更新機器翻譯軟體和工具,以期能為使用者提供更好的服務。
按一下這裡查看此文章的英文版本:969052
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com