The Side-by-Side configuration information for "c:\xxxx.DLL" contains errors. 

来源:互联网 发布:iphone2333软件 编辑:程序博客网 时间:2024/06/01 10:17

最近开发的时候碰到一个心累的问题:由于使用到第三的SDK,而且该SDK有一定的历史,

在开发机上运行的时候,能够正常运行,但是部署到客户的设备时却报,无法正常运行程序



这种错误一般都是由于缺 msvcr**.dll msvcp**.dll,

这个时候一般直接安装对应的支持库即可,推荐一个比较全的

Microsoft Visual C++ Redistributable Package合集(2005~2010)

http://download.csdn.net/detail/inaqui/3995341


但是,安装完对应的支持库后,发现并不能解决问题

使用depends对程序的依赖项进行检查,提示以下ERROR

Error: The Side-by-Side configuration information for "c:\program files (x86)\common files\XXXX.DLL" contains errors.  sxstrace.exe  (14001).


一开始以为是x64和x32的支持库安装的有问题,卸载后,只安装x86版本的支持库,仍旧无法工作。


于是使用sxstrace.exe跟踪程序的运行,却发现该SDK下的不同dll竟然依赖不同版本的MSVCR90.dll MSVCP90.dll。

启动cmd控制台,设置日志地址

sxstrace.exe  Trace  -logfile:C:\MySxSTrace.log


在新的控制台中执行程序


提示错误后关闭即可

然后在原来运行sxstrace.exe的控制台中敲回车

并执行命令

sxstrace.exe  Parse  -logfile:C:\MySxSTrace.log  -outfile:C:\MySxSTrace.txt



日志内容如下:



这是由于找不到9.0.30729.4148版本的msvcr90.dll等支持库,但是我确实已经把对应版本的支持库拷贝到当前目录和系统目录下,发现动态库不仅仅是拷贝到对应目录才能运行。


通过在观察日志,发现微软有个叫manifest的东西,来辅助完成对应的dll加载,在该日志中系统并没有从当前目录下去读取对应的dll,而是先去找manifest文件。

在c盘windows的winsxs文件夹下存了大量的manifest文件以及对应的msvc***.dll文件

在本次使用的sdk中只找到其中一个版本的支持库,需要再安装另一个支持库。


需要安装的支持库


通过搜索发现需要安装

Microsoft visual C++2008 Redistributable-x86 9.0.30729.4148

这个版本的支持库,其实安装vs的时候已经装过了,但在客户机里没有对应的安装包。
从微软官网下载
https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=11895&6B49FDFB-8E5B-4B07-BC31-15695C5A2143=1

安装完后程序正常运行。
0 0
原创粉丝点击