查看: 8600|回复: 22
收起左侧

[技巧] 缺少时间运行库文件的处理(修正)

[复制链接]
柯林
发表于 2011-7-16 19:21:37 | 显示全部楼层 |阅读模式
本帖最后由 柯林 于 2011-7-21 21:18 编辑

vb运行库,vc运行库,.net运行库,这三大东东,是保证系统和程序稳定运行的支持软件。有时程序运行出错或崩溃乃至无法运行,可能的原因之一就是和它们相关。其中我们爱装和比较熟悉的就是vc运行库——vc++2005,vc++2008,vc++2010了。
有的时候,虽然我们装了vc++运行库,可是程序还是运行不流畅,如果用个诺顿系统医生之类的工具扫描一下,它可能会告诉你,某某exe或者某某dll无法访问必须的库文件msvcr80.dll(AVG与红伞等程序都有这问题)等,结果可导致程序运行不稳定、无反应乃至崩溃等。遇到这样的问题,有两个处理方法:
方法1:找到msvcr80.dll扔到系统目录system32下。这实际上意味着全部程序都可共用,除非必要,一般不提倡这样做。
方法2:找到msvcr80.dll扔到程序旁边。这是最好的处理方式。
实际上,对于msvcr80.dll或者msvcr90.dll来说,这样做是不够的,还缺少一个manifest文件(msvcr70.dll和msvcr71.dll等旧版本可以不考虑此问题)。
以msvcr80.dll和msvcp80.dll来说,它们的旁边要有一个Microsoft.VC80.CRT.manifest文件来指明要装载的msvcr80.dll的版本以及publicKeyToken才能让程序正确装载msvcr80.dll加以使用。
msvcr80.dll等文件在C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.3053_x-ww_b80fa8ca目录里可以找到
Microsoft.VC80.CRT.manifest文件可以在C:\WINDOWS\WinSxS\Manifests里找到
注意,如果你安装vc++2005、2008、2010,可能存在不同的版本,注意Microsoft.VC80.CRT.manifest文件和msvcr80.dll和msvcp80.dll的版本号要一致
如果缺少mfc80.dll或mfu90u.dll,同样是到C:\WINDOWS\WinSxS目录里去找

实例:诺顿医生扫描提示红伞的setup.exe无法访问mfc90u.dll,msvcp90.dll,msvcr90.dll,处理过程是——
1、到C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_6f74963e找到msvcp90.dll和msvcr90.dll,再到C:\WINDOWS\WinSxS\Manifests里找到x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_6f74963e.manifest文件,把它掐头去中间改成Microsoft.VC90.CRT.manifest(就是把那些下划线的带注释的成分去掉),拿来跟msvcp90.dll和msvcr90.dll放到一起
2、到C:\WINDOWS\WinSxS\x86_Microsoft.VC90.MFC_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_405b0943里找到mfc90u.dll,再到C:\WINDOWS\WinSxS\Manifests里找到x86_Microsoft.VC90.MFC_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_405b0943.manifest改成Microsoft.VC90.MFC.manifest后与mfc90u.dll放到一起
3、安全模式下进入系统,把以上五个文件复制到红伞的安装目录下,重启计算机即可(这个例子是红伞有保护,没保护的软件直接复制进去即可,不用切换到安全模式)

基本方法就是这样,希望帮到有需要的朋友。

评分

参与人数 2经验 +50 人气 +2 收起 理由
tomjohnjoan + 1 原来“裤”也可以这样用!谢谢分享!
穿越星空 + 50 + 1 版区有你更精彩: )

查看全部评分

柯林
 楼主| 发表于 2011-7-16 19:22:01 | 显示全部楼层
本帖最后由 柯林 于 2011-7-16 19:47 编辑

如果诺顿系统医生扫描后提示程序无法访问mfc80.dll或者mfcu90.dll,除了找到缺少的mfc库文件外,还要增加两个文件——Microsoft.VC80.MFC.manifest和Microsoft.VC80.MFCLOC.manifest文件
这两个文件的示例分别如下(你可以用记事本制作它们)
Microsoft.VC80.MFC.manifest的内容是:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <noInheritable/>
    <assemblyIdentity
    type="win32"
    name="Microsoft.VC80.MFC"
ver    sion="8.0.50727.762"
    processorArchitecture="x86"
    publicKeyToken="1fc8b3b9a1e18e3b"
/>
    <file name="mfc80.dll" />
    <file name="mfc80u.dll" />
    <file name="mfcm80.dll" />
    <file name="mfcm80u.dll" />
</assembly>

Microsoft.VC80.MFCLOC.manifest的内容是:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Copyright © 1981-2001 Microsoft Corporation -->
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <noInheritable/>
    <assemblyIdentity type="win32" name="Microsoft.VC80.MFCLOC" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/>
    <file name="mfc80CHS.dll" hash="754165cac2d8fce9978dafeb313cea44852c9bf4" hashalg="SHA1"/>
    <file name="mfc80CHT.dll" hash="9167a79af2333f96551b12db36100f24801c4e98" hashalg="SHA1"/>
    <file name="mfc80DEU.dll" hash="72017b690322656f574718d51bc926ace81808f2" hashalg="SHA1"/>
    <file name="mfc80ENU.dll" hash="fb919708d073d2fa2174d3a328457c3be36cd4b5" hashalg="SHA1"/>
    <file name="mfc80ESP.dll" hash="b4536e19ba2f27ed4eb4d714a6f4b7fc69b5fb99" hashalg="SHA1"/>
    <file name="mfc80FRA.dll" hash="9157b1ab7a8c2b56f562f962370c75bbe726e8c6" hashalg="SHA1"/>
    <file name="mfc80ITA.dll" hash="5bcbbcf7fcc05361078ae12cc8030db21cc0f8de" hashalg="SHA1"/>
    <file name="mfc80JPN.dll" hash="612d2be3be23dc2feae4debb696f1d364ca07170" hashalg="SHA1"/>
    <file name="mfc80KOR.dll" hash="018700d630b2e9168a9ca4374b91e68eb912b2db" hashalg="SHA1"/>
</assembly>

#注意:version="8.0.50727.762" 是dll文件的版本号
#注意:publicKeyToken="1fc8b3b9a1e18e3b"是所在目录的编号
#注意:processorArchitecture="x86" 表明是32位系统的版本
#注意:<file name="mfc80CHS.dll" hash="754165cac2d8fce9978dafeb313cea44852c9bf4" hashalg="SHA1"/>这些东东是个体力活,请打开C:\WINDOWS\WinSxS\x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_91481303这个目录,一一援引这个目录内的dll文件,仿照示例书写它的文件名,后面填上用MD5验证工具验证好的哈希值。


如果缺少的是90系的,文件名应该写90的——Microsoft.VC90.MFC.manifest和Microsoft.VC90.MFCLOC.manifest
杂鼠
发表于 2011-7-16 19:25:03 | 显示全部楼层
先顶楼主,然后慢慢看
柯林
 楼主| 发表于 2011-7-16 19:42:12 | 显示全部楼层
友情提示:网上找到的诺顿系统医生,大多是2006年的作品,对xp等老系统很好使,对win7等新东东可能跟不上趟。不知道诺顿是否把新版集成在了杀软或墙上。注意下。
穿越星空
发表于 2011-7-17 10:36:36 | 显示全部楼层
理论上是这样的,但是试了下似乎不完全可行,当然我手上没有好的基于这些运行库的程序,可否提供下?或者说诺顿系统医生可以测试?
柯林
 楼主| 发表于 2011-7-17 16:13:35 | 显示全部楼层
穿越星空 发表于 2011-7-17 10:36
理论上是这样的,但是试了下似乎不完全可行,当然我手上没有好的基于这些运行库的程序,可否提供下?或者说 ...

你网上下个诺顿系统医生就可以检查出来了
别的不说,只要你装.NET framework,绝对有一大堆程序无法访问必须的msvcr80.dll等文件

这些文件,不是我凭空杜撰的,而是根据实例和网上的经验进行的总结,文中贴图的实例是从网上下载的程序中自带的必须的vc库中摘录的,不会有任何问题。
柯林
 楼主| 发表于 2011-7-17 16:32:43 | 显示全部楼层
本帖最后由 柯林 于 2011-7-17 16:34 编辑
穿越星空 发表于 2011-7-17 10:36
理论上是这样的,但是试了下似乎不完全可行,当然我手上没有好的基于这些运行库的程序,可否提供下?或者说 ...


我发给你吧,2006版的:

norton windoc wizard.part2.rar (495.83 KB, 下载次数: 109)
穿越星空
发表于 2011-7-17 20:22:12 | 显示全部楼层
本帖最后由 穿越星空 于 2011-7-17 20:30 编辑
柯林 发表于 2011-7-17 16:13
你网上下个诺顿系统医生就可以检查出来了
别的不说,只要你装.NET framework,绝对有一大堆程序无法访问 ...


也就是说同时安装VC运行库和.NET运行库会造成VC无法正常调用?可否给我看下你的测试截图呢?
文中贴图?没看见图啊。
诺顿的应该检查不了非注册系统的运行库吧?我运行了下你给的单文件,没有提到相关信息。

现在我的问题是如何绿色使用这些运行库,使用你给出的方式无法用诺顿检测,我也找不到合适的应用程序来测试放在程序所在目录的运行库是否可以被加载。
柯林
 楼主| 发表于 2011-7-17 21:15:15 | 显示全部楼层
穿越星空 发表于 2011-7-17 20:22
也就是说同时安装VC运行库和.NET运行库会造成VC无法正常调用?可否给我看下你的测试截图呢?
文中贴图 ...

不存在“同时安装VC运行库和.NET运行库会造成VC无法正常调用”这种事吧?没法正常访问必须的vc++的dll文件,通常是软件编写导致的问题。有些软件为了避免这问题,安装程序自带vc++先运行安装一遍。问题的实质可能是没有建立正确的链接之类的问题吧——不与编程和系统研究打交道,这问题不清楚——因为vc++已经安装,而它没法正确找到去加载使用而已。

现在已经理顺了,没图了。好吧,我去掉一个,截图给你看:
2011-07-17 21 13 37.png
穿越星空
发表于 2011-7-18 00:35:46 | 显示全部楼层
柯林 发表于 2011-7-17 21:15
不存在“同时安装VC运行库和.NET运行库会造成VC无法正常调用”这种事吧?没法正常访问必须的vc++的dll文件 ...

那如果是“安装程序自带vc++先运行安装一遍”,那对.Net的软件没影响吧?
问题是因为系统没有在manifest中找到相匹配的文件而没有加载所需要的文件。
那现在的问题是我想试一下你所给出的方法是否有效,有什么可行的办法呢?
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-1-16 21:41 , Processed in 0.131712 second(s), 20 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表