- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
WinSxS混乱导致的应用程序不能启动
C:\dllsxstest.exe --------------------------- C:\dllsxstest.exe
由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。
--------------------------- 确定?? ---------------------------
?
如果看到这个错误,那么一定是因为运行库的manifest混乱或破坏导致WinSxS机制无法正常使用从而引起应用程序加载失败。
从Windows XP开始,微软引入了WinSxS机制用于解决DLL版本冲突的问题。解决方法是通过一个额外的清单文件(manifest)记录所需要的运行库的版本号等信息。进程创建的时候,CSRSS进程通过SxS.DLL模块解析manifest文件,然后加载合适的DLL版本。
今天,我这里处理了一个WinSxS版本混乱导致的应用程序无法加载的问题。
环境如下:
有一个EXE文件,不依赖任何的运行库
有很多DLL文件,分别在EXE文件目录的子目录下
EXE文件所在目录下有一套安装的VC8运行库
DLL文件需要依赖VC8运行库
因为各种原因,没有使用 vcredist_x86.exe 把VC8运行库安装到Windows\WinSxS目录下面
使用的时候发现,EXE文件加载DLL的时候,总是提示加载失败。DLL无法启动。我用 Process Monitor 监视了一下文件的读写操作,发现EXE文件在加载DLL的时候,CSRSS总是去读取 Windows\WinSxS 目录下的运行库文件,由于没有使用 vcredist_x86.exe 把VC8运行库安装到Windows\WinSxS目录下面,因此DLL加载失败了。
我很奇怪的问题是,为什么总是忽略了EXE目录下的manifest文件,而总是使用 Windows\WinSxS 目录下的文件呢?
以前知道manifest文件可以外置,也可以内置到PE文件的资源里面,难道是内置的问题吗?用Resource Hacker打开DLL文件,果然发现了内置的清单文件。把这个资源结点删除以后,保存退出,然后再使用EXE文件加载这个DLL文件,OK~问题解决了。这次使用的是EXE目录下的运行库文件而没有使用Windows\WinSxS目录下的文件了。
BTW:对于开发人员来说,自然不能编译以后再手工删除这个资源结点,解决方法很简单,把工程的manifest设置里面的 embedded manifest 功能关闭掉,这样编译以后就会出现编译生成的目标文件和一个额外的manifest文件。使用的时候,系统会首先尝试到Windows\WinSxS目录下面寻找文件,如果文件不存在,那么会在EXE文件所在目录下寻找,而不是去DLL所在目录下寻找文件。
问题解决以后,就需要想想问什么只有在部分系统上面出现这个问题了,检查发现:没有问题的系统都使用vcredist_x86.exe 把VC8运行库安装到Windows\WinSxS目录下面了,有问题的系统,发现WinSxS目录下没有运行库文件,自然不能使用了。
目前,很多软件都使用了VC8开发,而且都使用 vcredist_x86.exe 把VC8运行库安装到Windows\WinSxS目录下面,但是有某些软件在卸载的时候,又把这个运行库卸载了,结果就会导致类似提示“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题”的错误的出现。这是最常见的一种现象。另外还有下面的几种可能会导致WinSxS混乱:
manifest文件被破坏
复制了错误的manifest文件到错误的目录,导致manifest文件里面记录的内容和实际的DLL版本不符
最后,如果你碰到提示“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题”,最佳的操作方法是看看这个文件依赖的运行库是否齐备,如果不会看,最简单的办法就是重新安装所有的运行库版本到系统里面。
下面是所有常见的32位运行库版本的下载地址:
适用于 Visual C++ 2005 开发的程序的运行库版本:/downloads/details.aspx?FamilyID=32bc1bee-a3f9-4c13-9c99-220b62a191eedisplaylang=zh-cn
适用于 Visual C++ 2005 SP1 开发的程序的运行库版本:/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647displaylang=zh-cn
适用于 Visual C++ 2008 开发的程序的运行库版本:/downloads/details.aspx?fa
您可能关注的文档
最近下载
- DB37T4871-2025 城市轨道交通试运行技术规范.pdf VIP
- 医疗美容病历书写基本规范.docx
- 最新2023版知识产权贯标GBT29490表单 知识产权组织环境、相关方需要和期望分析一览表[知识产权合规管理体系文件].docx
- 冰雪雕设计及制作工程招标示范文本.doc VIP
- 广州恩宁路历史文化街区永庆坊微改造正式.pptx VIP
- 19028 安全生产治本攻坚三年行动方案(工程施工项目) (1).docx VIP
- 嘉世咨询-嘉世咨询2025中国集换式卡牌市场现状报告.pdf
- 招生话术培训课件.ppt VIP
- 教学课件-看得见的声音-.pptx VIP
- 安徽省血液透析管理规范.pdf VIP
原创力文档


文档评论(0)