还原缺少的 Windows Installer 缓存文件并解决在更新期间SQL Server的问题

本文介绍了各种过程,可用于解决由于 windows 安装程序缓存损坏而SQL Server service pack或累积更新时发生的各种错误。

原始产品版本:   SQL Server
原始 KB 编号:   969052

备注

本文中介绍的过程仅提供紧急安全机制,而不是永久性修复。 使用此紧急过程的客户应该使用 Windows Installer 缓存验证程序程序包验证其 Windows Installer 缓存,如 KB 文章 缺少 Windows Installer 缓存需要计算机重建中的说明。

症状

当您尝试安装 Microsoft SQL Server Service Pack 或累积更新时,可能会遇到各种错误消息,这些错误消息可能指示 Windows Installer 缓存问题。 位于 c:\windows\installer 文件夹中的 Windows Installer 缓存存储使用 Windows Installer 技术安装的应用程序的重要文件,并且不应删除。 如果安装程序缓存已被破坏,则执行卸载、修复或更新安装程序等操作之前,可能不会立即看到SQL Server。

当你安装SQL Server时,Windows Installer 将关键文件存储在 Windows Installer 缓存中 (默认值为 C:\Windows\Installer) 。 卸载和更新应用程序需要这些文件。 无法在计算机之间复制丢失的文件,因为它们是唯一的。

对于安装SQL Server,Microsoft 建议首先使用以下文章中所述的修复过程来验证当前安装:

您应该使用命令行从原始安装媒体运行修复: setup.exe/ACTION=REPAIR/INDICATEPROGRESS=TRUE

首先修复常见的共享组件和功能,然后重复该命令以修复安装的实例。 在修复过程中,安装程序对话框将消失。 只要进度窗口未显示错误,修复过程就如预期进行。 如果缺少特定组件的安装程序缓存文件,则修复过程将遇到错误。

原因

当 Windows Installer 数据库文件 (.msi) 或 Windows Installer 修补程序文件 (.msp) 从 Windows Installer 缓存中丢失时,可能会出现这些问题。 Windows Installer 缓存位于 文件夹中 :%windir%\installer

使用 Windows Installer 安装产品时,原始 .msi 文件的去除版本存储在 Windows Installer 缓存中。 每次更新产品(如修补程序、累积更新或 Service Pack 安装程序)时,也将相关的 .msp 或 .msi 文件存储在 Windows Installer 缓存中。

产品的任何未来更新(如修补程序、累积更新或 Service Pack 设置)都依赖于存储在 Windows Installer 缓存中的文件中的信息。 如果没有此信息,新更新将无法执行所需的转换。

解决方案

若要解决这些问题,请使用以下过程之一。

过程 1.a.:使用 FixMissingMSI 工具

在此过程中,将使用 FixMissingMSI 工具识别 Windows Installer 缓存中缺少的 MSI 和 MSP 文件。 作为附加步骤,你可以将工具指向原始媒体位置并缓存缺少的文件。

可以从 GitHub存储库下载 FixMissingMSI 工具。

有关详细信息,请参阅 SQL Setup ToolSuite Introduction (1) -FixMissingMSI

过程 1.b.:使用FindSQLInstalls.vbs脚本

若要完成此过程中的步骤,您必须将 FixMissingMSI 文件夹中的 FindSQLInstalls.vbs 脚本从 GitHub 存储库复制到尝试更新 SQL Server 安装的计算机上的本地文件夹。

备注

该FindSQLInstalls.vbs脚本会收集信息以更正无效的程序包路径。 此脚本用于源位置,以确保所有 MSP 包都位于 Windows Installer 缓存目录中。 执行脚本输出文件中 Action 所需行中指示的命令后,如果原始源媒体可用,将重新添加缺少的包。

若要使用脚本解决这些问题,请按照以下步骤操作:

  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 媒体。

在下面的示例中,源是驱动器 G 中的 CD 或 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 中的条目类似。 大多数情况下,你会注意到引用修补程序的 Patch LastUsedSource 行中的条目,此行类似于: Patch LastUsedSource: n;1;c:\0ca91e857a4f12dd390f0821a3\HotFixSQL\Files\

此输出指示有关修补程序安装的以下内容:

  • 通过双击修补程序的可执行文件来安装原始修补程序。
  • 修补程序的安装程序在修补程序安装过程中使用了临时 c:\0ca91e857a4f12dd390f0821a3 文件夹 , 。
  • 若要重新创建路径,必须运行相同的可执行文件并添加 参数 /x:c:\0ca91e857a4f12dd390f0821a3 :。

备注

此命令强制可执行文件将文件解压缩到先前缺失的位置,并重新创建用任何缺失文件更新 Windows 安装程序缓存所需的结构。 实际位置将有所不同,并且可能需要将单个修补程序(如 Service Pack)提取到多个位置。 每个已安装的产品都包含一个部分,其中包含有关安装的修补程序的以下信息:

显示名称:
KB 文章 URL: http://support.microsoft.com/?kbid=<value>
Patch LastUsedSource:

如有必要,知识库文章 URL 行可以帮助您下载任何修补程序媒体。

过程 2:手动还原文件

若要手动还原 Windows Installer 缓存中缺少的文件,请按照以下步骤操作:

  1. 从错误消息、安装程序或 Windows Installer 日志文件注册表项中收集缺少文件的完整详细信息。 例如,在"症状"部分中的"错误消息1"中,错误消息中将显示解决问题所需的全部信息:

    • PatchName:"修补程序 1702 for SQL Server 2008 R2 (KB981355) (64 位) "
    • Patch 使用的原始 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.msp。

您可以启动导致错误的更新的安装程序,然后恢复更新过程。 对于另一个组件的 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 文件的修补程序包和产品详细信息

产品的不同版本会针对此问题生成不同的错误消息。 对于从 2008 SP1 开始更新的安装程序,"症状"部分SQL Server错误消息。 对于其他更新,你会收到错误消息,这些错误消息可能未明确指定 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 Patches 注册表子项中搜索缺少的 .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

数据:GDR 2050 for SQL Server Database Services 2005 ENU (KB932555)

现在,你已拥有所有信息点,可以开始执行步骤来解决 Windows Installer 缓存中缺少的文件。

备注

如果使用 SQL Server 2008 Service Pack 3 (SP3) 或更高版本,您还可以收到有关缺少的 .msi 文件的类似错误消息。 通过使用此错误消息,您可以快速确定缺少的文件、要下载的 Service Pack 以及可以找到下载的位置。

若要详细了解如何获取 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 (所有分支)

    产品版本 缺少安装程序包或 MSI (时) 错误消息 缺少安装程序缓存包或 MSP (时) 错误消息
    SQL Server 2005 1636 无法安装 Windows Installer MSI 文件
    1636 无法安装 Windows Installer MSP 文件

    备注

    您必须查看安装程序日志文件以确定是否缺少任何缓存文件。 若要详细了解如何这样做,请转到"解决方案 " 部分。

  • For SQL Server 2008 SP1

    产品版本 缺少安装程序包或 MSI (时) 错误消息 缺少安装程序缓存包或 MSP (时) 错误消息
    SQL Server 2008 SP1 无错误消息 标题:SQL Server安装失败。
    ------------------------------
    SQL Server安装程序遇到错误: 无法打开修补程序文件。该文件为:c:\WINNT\Installer\FileName.msp。错误代码0x84B20001。
    ------------------------------
  • For SQL Server 2008 SP3 build-only (CU/GDR branches are not applicable)

    产品版本 缺少安装程序包或 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 SQL Server 2008 service Pack 3 (KB2546951) (64 位) 版本安装 VersionNumber

    备注

    执行升级时会收到以下错误消息:
    SQL Server error2

  • 对于 SQL Server 2008 R2 SP1, (CU/GDR 分支不适用)

    产品版本 缺少安装程序包或 MSI (时) 错误消息 缺少安装程序缓存包或 MSP (时) 错误消息
    SQL Server 2008 R2 SP1 标题: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  错误

  • For SQL Server 2008 R2 SP2

    产品版本 缺少安装程序包或 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)

    产品版本 缺少安装程序包或 MSI (时) 错误消息 缺少安装程序缓存包或 MSP (时) 错误消息
    SQL Server 2008 R2 SP1 缓存的 MSI C:\Windows\Installer\FileName.msi 文件丢失。 其原始文件是 C:\Windows\Installer\sql_FeatureName.msi ,并且它针对产品 Microsoft SQL ServerVersion 从 C:\originalfolder 版本 、 语言 VersionNumber 进行安装 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> 2012 KB SQL Server版本 VersionNumber

    备注

    在 2012 年 SQL Server,RTM 媒体可能无法正确注册。 在这种情况下卸载累积更新或 Service Pack 时,安装程序可能会提示您输入 RTM 媒体。 若要解决此问题,在修补程序删除过程中提供 RTM 媒体路径。

参考