问题描述

在电脑中需要安装 ​​visual Studio​​​ 2013,安装过程中会自动调用 ​​Visual C++ 2008 Redistributable​​​,但是因为调用安装的软件不成功,导致 ​​VS​​ 也无法安装成功。

问题分析 1

问题分析:

  1. HRESULT 0x800736B3 是指: “The referenced assembly is not installed on your system”
  2. Error code “1935” and HRESULT “0x800736B3”: 意味着您可能会需要更新Windows 7以使系统保持最新状态并安装最新的关键Windows Update。

如果 Windows 7 已经是最新版本的话可以尝试以下步骤:

  1. 查看电脑中是否 turned on the windows feature of .NET Framework 3.5.1
    a. 可以在这里看到: Control Panel -> Programs and Features -> Turn Windows features on or off -> Check the box next to Microsoft .NET Framework 3.5.1.
  2. 使用 验证工具​​来验证.Net​​ Framework 2.0,3.0和3.5
    a. ​​如果.Net​​ Framework 2.0, 3.0和3.5无法在您的计算机上进行验证,则可以尝试按照以下博客中提到的步骤修复Windows ​​7上的.NET​​ Framework 2.0,3.0和3.5。
    i. ​​https://blogs.msdn.microsoft.com/astebner/2007/03/26/how-to-repair-the-net-framework-2-0-and-3-0-on-windows-vista/​​ b. ​​如果.NET​​ Framework 2.0,3.0和3.5已成功验证,但安装仍然失败,请尝试下面博客里的方法:
    i. ​​javascript:void(0)​

结果是试了之后依然没用。。。

问题分析 2

  1. 下载​​,microsoft-windows-netfx3-ondemand-package.cab​​ 文件
  2. 管理员模式启动 cmd.
  3. 输入下面的命令:
    a.​​​DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:c:\sources\sxs​
  4. 显示成功执行之后,重启设备,再次安装 microsoft visual c++ 2008 redistributable

问题分析 3 – 分析 安装失败时的详细的 MSI 安装日志和CBS.log

再次安装 ​​VC++ 2008 redistributable​​​,并在安装 的时候通过以下步骤收集这些 ​​log​​​. 下面的命令是针对 ​​x64​​ 位的 安装包,如果安装包是 x86 的话把 x64 替换成 x86 就可以了。

  1. 把​​vcredist_x64.exe​​​ 放到一个临时文件中,比如:​​c:\temp​
  2. 管理员模式打开 cmd.
  3. 运行下面的命令来进行安装并收集 日志
    a.​​​vcredist_x64.exe /l C:\temp\vcredist_x64.log​
  4. 继续安装一直到出现出现安装失败的那个窗口.
  5. 收集下面的两个 日志文件, 通过邮件发给我
    a.​​​C:\temp\vcredist_x64.log​​​ b. ​​C:\Windows\Logs\CBS\CBS.log​

问题分析 4 – 分析安装失败的 log 文件

分析 log 之后我们发现问题在于 系统文件缺失 或者 冲突:

Vcredist_x64.log

MSI (s) (28:A0) [15:11:20:278]: Note: 1: 1935 2: {CE3230AC-E72E-3EDF-8A57-87FCE1CF2629} 3: 0x800736B3 4: IAssemblyCacheItem 5: Commit 6: Microsoft.VC90.ATL,version="9.0.30729.1",publicKeyToken="1fc8b3b9a1e18e3b",processorArchitecture="amd64",type="win32" 
MSI (s) (28:A0) [15:11:20:278]: Assembly Error (sxs): Please look into Component Based Servicing Log located at -295418696ndir\logs\cbs\cbs.log to get more diagnostic information.
MSI (s) (28:A0) [15:11:26:903]: Product: Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.17 -- Error 1935.An error occurred during the installation of assembly 'Microsoft.VC90.ATL,version="9.0.30729.1",publicKeyToken="1fc8b3b9a1e18e3b",processorArchitecture="amd64",type="win32"'. Please refer to Help and Support for more information. HRESULT: 0x800736B3. assembly interface: IAssemblyCacheItem, function: Commit, component: {CE3230AC-E72E-3EDF-8A57-87FCE1CF2629}

Cbs.log

2018-06-21 15:11:20, Info                  SXS    Submitting install transaction
2018-06-21 15:11:20, Info CSI 0000024c Performing 1 operations; 1 are not lock/unlock and follow:
Install (5): flags: 0 tlc: [Microsoft.VC90.ATL, Version = 9.0.30729.1, pA = PROCESSOR_ARCHITECTURE_AMD64 (9), Culture neutral, VersionScope neutral, PublicKeyToken = {l:8 b:1fc8b3b9a1e18e3b}, Type = [l:10{5}]"win32", TypeName neutral, PublicKey neutral]) ref: ( flgs: 00000000 guid: {27dec61e-b43c-4ac8-88db-e209a8242d90} name: [l:0]"" ncdata: [l:62{31}]"C:\Windows\system32\msiexec.exe") thumbprint: [l:128{64}]"0244eac606f513cdc5623c418d394dd7fdcf005174c9136143ffd57e370c8bba"
2018-06-21 15:11:20, Info CSI 0000024d Cannot install deployment that's not staged
2018-06-21 15:11:20, Error CSI 0000024e@2018/6/21:07:11:20.231 (F) d:\w7rtm\base\wcp\componentstore\csd_transact.cpp(2404): Error STATUS_SXS_ASSEMBLY_NOT_FOUND originated in function CCSDirectTransaction::InstallDeployment expression: (null)
[gle=0x80004005]
2018-06-21 15:11:20, Error CSI 0000024f (F) STATUS_SXS_ASSEMBLY_NOT_FOUND #430779285# from CCSDirectTransaction::OperateEnding at index 0 of 1 operations, disposition 0[gle=0xd0150004]
2018-06-21 15:11:20, Error CSI 00000250 (F) HRESULT_FROM_WIN32(ERROR_SXS_ASSEMBLY_NOT_FOUND) #430779155# from Windows::COM::CComponentStore::InternalTransact(...)[gle=0x800736b3]
2018-06-21 15:11:20, Error SXS Transact2 failed with 0x800736b3

错误代码 ​​0x800736b3 (ERROR_SXS_ASSEMBLY_NOT_FOUND)​​​ 是指因为缺少一些系统文件从而导致了 ​​Vcredist_x64​​不能正确安装,尝试以下步骤去解决这个问题:

  1. Run the checksur.exe (System Update Readiness Tool) tool to fix assembly errors
    a.​​​https://support.microsoft.com/en-us/kb/947821​​. 在这个网站中下载相应版本的工具
  2. Run the sfc.exe (System File Checker Tool) tool to repair missing or corrupted system files.
    a.​​​https://support.microsoft.com/en-us/kb/929833​

问题分析 5 – 检查系统文件是否缺失

在设备上检查一下下面路径的文件是否存在:

C:\Windows\WinSxS\Manifests\amd64_microsoft.vc90.atl_1fc8b3b9a1e18e3b_9.0.30729.1_none_9aefdaaa829eb818.manifest
// log 中显示系统缺失的文件

问题分析 6 – 再次收集 log

6.1

更新包安装还是报错的话,我们需要再抓一下这个安装日志(MSI 安装日志和CBS.log),看看是不是和原来的错一样:

a. 把 ​​vcredist_x64.exe​​​ 放到一个临时文件中,比如:c:\temp.
b. 管理员模式打开 cmd.
c. 运行下面的命令来进行安装并收集 日志

  vcredist_x64.exe /l C:\temp\vcredist_x64.log

d.继续安装一直到出现出现安装失败的那个窗口.
e.收集下面的两个 日志文件, 通过邮件发给我

  • C:\temp\vcredist_x64.log
  • C:\Windows\Logs\CBS\CBS.log

6.2

在可以正常安装 VC++ 2008 redistributable – vcredist_x64.exe 的机器上检查一下下面路径的文件是否存在:

C:\Windows\WinSxS\Manifests\amd64_microsoft.vc90.atl_1fc8b3b9a1e18e3b_9.0.30729.1_none_9aefdaaa829eb818.manifest

6.3

收集 procmon 日志:

a. 安装 ProcessMonitor
b. 解压并运行 Procmon.exe
c. 安装 vcredist_x64.exe
d. 收集 日志:

e. 分析 C:\Users\username\Downloads\ProcessMonitor\Logfile.PML 这个日志文件

问题分析 6 – 再次分析安装失败的 log

分析了提供的log,而且在本地的测试机上也安装了同样的vcredist安装包并且同样抓取了安装日志进行比较。根据安装日志以及procmon的日志比较结果来看,问题确认为缺少了
​​​\SystemRoot\WinSxS\Manifests\x86_microsoft.vc90.atl_1fc8b3b9a1e18e3b_9.0.30729.1_none_e29d1181971ae11e.manifest​​ 文件导致安装无法完成,但是我们无法了解为何该文件会缺失。

从日志来看,系统之前可能安装过此版本的 ​​vcredist​​, 但是不知道什么原因可能导致文件损坏或者丢失。我建议检查以下的注册表键值看看是否存在,如果存在的话请先将这些键值导出到文件,然后试着删除这些键值。删除以后再安装看看是否可以成功。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide\Winners\x86_microsoft.vc90.atl_1fc8b3b9a1e18e3b_none_ea1622fcb25f4053
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide\Winners\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_none_ea33c8f0b247cd77
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide\Winners\x86_microsoft.vc90.mfc_1fc8b3b9a1e18e3b_none_eaa49612b1f5b2ea
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide\Winners\x86_microsoft.vc90.mfcloc_1fc8b3b9a1e18e3b_none_389bb7490f8d1de8
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide\Winners\x86_microsoft.vc90.openmp_1fc8b3b9a1e18e3b_none_020a384235a0510f

请注意注册表键值的操作存在危险性,所以做任何修改之前务必保证先做好备份。

解决方案

重装系统 或者 换一台机器

=-=

就是这么蛋疼

过程总结

1. 确认 Windows 7 已是最新版本,验证工具 验证 .NET Framework 2.0、3.0、3.5 均已安装。

a. 点开始——在运行框里输入regedit
b. 展开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control,在右边找到: RegistrySizeLimit
c. 如果没有RegistrySizeLimit这个项,则右键单击Control——选择新建——DWORD(32-位)值
d. 新建项命名为:RegistrySizeLimit
e. 双击RegistrySizeLimit,基数为:十六进制时,在数值数据栏中输入 :ffffffff
f. 再选中基数十进制,如果数值数据栏中有4294967295,点击确定,如果数值数据栏中没有就输入:4294967295,再点击确定
g. 重新启动计算机后,点开始——在运行框中输入cmd,选中cmd,鼠标右键选择以管理员身份运行,输入SFC /SCANNOW
h. 问题依旧存在

2. 离线安装 microsoft-windows-netfx3-ondemand-package.cab 这个安装报错的组件,收集 log

a. 管理员模式启动 cmd, 输入下面的命令: DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:c:\sources\sxs
b. 显示成功执行之后,重启 vdi, 再次安装 microsoft visual c++ 2008 redistributable
c. 问题依旧

3. 分析安装失败的 log

According to our discussion, the problem is VC++ 2008 redistributable installation failure on Win7 system, so we will need to collect the verbose MSI installation log together with the CBS.log for analyzing.

Please suggest customer to reproduce this issue again and collect the necessary logs in the following steps. We will treat x64 version installation as a sample. If the customer is installing x86 version, please modify the related parameter accordingly.

  1. Download and copy the vcredist_x64.exe to a temporary folder, for example: c:\temp.
  2. Open CMD window with administrator privilege.
  3. Run the commands to launch installation with verbose logging enabled:
    ​​​vcredist_x64.exe /l C:\temp\vcredist_x64.log​
  4. Continue the installation until the error is reproduced, then terminate the installation window.
  5. Please collect the following log files and send them to me.
    ​​​C:\temp\vcredist_x64.log​​​​C:\Windows\Logs\CBS\CBS.log​

4.分析 log 之后我们发现问题在于 系统文件缺失 或者 冲突。

Vcredist_x64.log

MSI (s) (28:A0) [15:11:20:278]: Note: 1: 1935 2: {CE3230AC-E72E-3EDF-8A57-87FCE1CF2629} 3: 0x800736B3 4: IAssemblyCacheItem 5: Commit 6: Microsoft.VC90.ATL,version="9.0.30729.1",publicKeyToken="1fc8b3b9a1e18e3b",processorArchitecture="amd64",type="win32" 
MSI (s) (28:A0) [15:11:20:278]: Assembly Error (sxs): Please look into Component Based Servicing Log located at -295418696ndir\logs\cbs\cbs.log to get more diagnostic information.
MSI (s) (28:A0) [15:11:26:903]: Product: Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.17 -- Error 1935.An error occurred during the installation of assembly 'Microsoft.VC90.ATL,version="9.0.30729.1",publicKeyToken="1fc8b3b9a1e18e3b",processorArchitecture="amd64",type="win32"'. Please refer to Help and Support for more information. HRESULT: 0x800736B3. assembly interface: IAssemblyCacheItem, function: Commit, component: {CE3230AC-E72E-3EDF-8A57-87FCE1CF2629}

Cbs.log

2018-06-21 15:11:20, Info                  SXS    Submitting install transaction
2018-06-21 15:11:20, Info CSI 0000024c Performing 1 operations; 1 are not lock/unlock and follow:
Install (5): flags: 0 tlc: [Microsoft.VC90.ATL, Version = 9.0.30729.1, pA = PROCESSOR_ARCHITECTURE_AMD64 (9), Culture neutral, VersionScope neutral, PublicKeyToken = {l:8 b:1fc8b3b9a1e18e3b}, Type = [l:10{5}]"win32", TypeName neutral, PublicKey neutral]) ref: ( flgs: 00000000 guid: {27dec61e-b43c-4ac8-88db-e209a8242d90} name: [l:0]"" ncdata: [l:62{31}]"C:\Windows\system32\msiexec.exe") thumbprint: [l:128{64}]"0244eac606f513cdc5623c418d394dd7fdcf005174c9136143ffd57e370c8bba"
2018-06-21 15:11:20, Info CSI 0000024d Cannot install deployment that's not staged
2018-06-21 15:11:20, Error CSI 0000024e@2018/6/21:07:11:20.231 (F) d:\w7rtm\base\wcp\componentstore\csd_transact.cpp(2404): Error STATUS_SXS_ASSEMBLY_NOT_FOUND originated in function CCSDirectTransaction::InstallDeployment expression: (null)
[gle=0x80004005]
2018-06-21 15:11:20, Error CSI 0000024f (F) STATUS_SXS_ASSEMBLY_NOT_FOUND #430779285# from CCSDirectTransaction::OperateEnding at index 0 of 1 operations, disposition 0[gle=0xd0150004]
2018-06-21 15:11:20, Error CSI 00000250 (F) HRESULT_FROM_WIN32(ERROR_SXS_ASSEMBLY_NOT_FOUND) #430779155# from Windows::COM::CComponentStore::InternalTransact(...)[gle=0x800736b3]
2018-06-21 15:11:20, Error SXS Transact2 failed with 0x800736b3

错误代码 0x800736b3 (ERROR_SXS_ASSEMBLY_NOT_FOUND) 是指因为缺少一些系统文件从而导致了Vcredist_x64 不能正确安装,可以尝试以下步骤去解决这个问题:

a. Run the checksur.exe (System Update Readiness Tool) tool to fix assembly errors
i. ​​​https://support.microsoft.com/en-us/kb/947821​​​. 在这个网站中下载相应版本的工具
b. Run the sfc.exe (System File Checker Tool) tool to repair missing or corrupted system files.
i. ​​​https://support.microsoft.com/en-us/kb/929833​

5. 最终给出的建议:

分析了提供的log,而且在本地的测试机上也安装了同样的 ​​vcredist​​​ 安装包并且同样抓取了安装日志进行比较。根据安装日志以及 ​​procmon​​​ 的日志比较结果来看,问题确认为缺少了​​\SystemRoot\WinSxS\Manifests\x86_microsoft.vc90.atl_1fc8b3b9a1e18e3b_9.0.30729.1_none_e29d1181971ae11e.manifest​​ 文件导致安装无法完成,但是我们无法了解为何该文件会缺失。

从日志来看,系统之前可能安装过此版本的 ​​vcredist​​, 但是不知道什么原因可能导致文件损坏或者丢失。我建议检查以下的注册表键值看看是否存在,如果存在的话请先将这些键值导出到文件,然后试着删除这些键值。删除以后再安装看看是否可以成功。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide\Winners\x86_microsoft.vc90.atl_1fc8b3b9a1e18e3b_none_ea1622fcb25f4053
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide\Winners\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_none_ea33c8f0b247cd77
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide\Winners\x86_microsoft.vc90.mfc_1fc8b3b9a1e18e3b_none_eaa49612b1f5b2ea
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide\Winners\x86_microsoft.vc90.mfcloc_1fc8b3b9a1e18e3b_none_389bb7490f8d1de8
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide\Winners\x86_microsoft.vc90.openmp_1fc8b3b9a1e18e3b_none_020a384235a0510f

请注意注册表键值的操作存在危险性,所以做任何修改之前务必保证先做好备份。

再尝试以上步骤之后安装还是报错的话,建议重装系统。