首页
社区
课程
招聘
[ZT]MSVCR80.DLL 里面的黑手
发表于: 2006-6-16 10:36 7803

[ZT]MSVCR80.DLL 里面的黑手

2006-6-16 10:36
7803
今天试验了一下果然不行。2000 之类不支持 winsxs 的系统都可以跑,xp 和 2k3 下面,都说没有正常设置,如果手动删掉 exe 里面的 manifest 的话,则是出个 assert, 说用不正常的方式 load dll

google 了一下,找到了某德国牛人的文章

http://blog.kalmbachnet.de/

Using the VC 2005 shared CRT/MFC (DLL) without a manifest is not supported!
If you build your app with VC2005 and you accidently have disabled the embedding of the manifest file (or deleted the separate appname.exe.manifest file), you will get an error on XP and later!

This has to do with the checking for a valid manifest of the EXE inside the CRT/MFC DLLs “DllEntry” (via a call to _check_manifest). If the OS supports manifests (or better Side-By-Side assemblies/DLLs) the CRTs´ DLL forces the check of the EXEs´ manifest. If there is no (valid) manifest, then the DLL refuses to load (returns 0) and therefor the EXE cannot be started. It might display the following error message (or similar):
R6034
An application has made an attempt to load the C runtime library incorrectly.
Please contact the application’s support team for more information.

But in the following cases the manifest checking inside the CRT-DLL is not done:

Pre-fusion OS (FindActCtxSectionStringW not found in kernel32.dll)
Loaded by instrumented-mscoree.dll (mscoree.dll and pgort80.dll is already loaded)
The path returned with GetModuleFileNameW of the DLL is longer than 8000 characters
The path to the DLL, returned by GetLongPathName is longer than 8000 characters

Microsoft 太变态了。faint, 于是按照该牛人的说法,注释掉 crt src 里面的 _check_manifest 调用, build 出来一个 msvcr80.dll , 和删掉 manifest 的 exe 配合使用就可以在任何系统上面使用了。

再次 fick microsoft.

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费
支持
分享
最新回复 (7)
雪    币: 146
活跃值: (33)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
不懂,学习!!
2006-6-16 13:47
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
最初由 鸡蛋壳 发布
再次 fick microsoft

???
2006-6-16 14:46
0
雪    币: 214
活跃值: (70)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
是啊,我也为这个烦,必须要有manifest,
不然就不给运行,
想放弃VC2005,可他的IDE太好用了,哈哈
2006-6-16 22:44
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
把manifest 放到资源里不行吗?
至少我认为WinSxS还是很好的东东啊
2006-6-20 17:44
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
关心一下,还没用过vs2005,怕跑不动
2006-6-20 18:09
0
雪    币: 229
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
manifest做的版本管理不是很好吗?干吗要去掉?如果不想用,选择静态编译不就成了,要废这么大周折干吗?
2006-6-28 10:44
0
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
8
同意楼上的 而且本来VC8的RUNTIMEDLL 操作系统也没有自带。。
还不如静态编译来的简单 体积也更小
2006-6-30 21:29
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册
//