SideBySide Error

| |
[不指定 2006/11/22 16:52 | by ipaddr ]
自从安装SnagIt之后,系统的日志里经常会有条SideBySide的错误,经过搜索资料,发现SnagIt使用VC2005(VC8)开发,而Windowsxp,windows2003系统的机器,使用VC8开发的软件时,都可能会有这个错误.

VC2005编译出来的程序文件,采用了manifest方式来指定dll文件。对于win98、win2000系统,把exe文件和VC的 dll连接库放到一起就成了。对于winxp、win2003系统就要麻烦的多了,VC的连接库默认是被放到了winsxs目录下,结果造成在这些系统上,直接拷贝exe文件,往往是不能运行(找不到msvcr80.dll、mfc80.dll文件等),或者在事件日志中报错。

解决方式:
方式一、在目标系统上安装2005版vcredist_x86.exe。(上微软官方网站下载)

方式二、直接拷贝VS8目录下的VC \ redist \ x86 \  目录下的 Microsoft.VC80.MFC、Microsoft.VC80.CRT、Microsoft.VC80.MFCLOC几个文件夹,到exe所在的目录下,目录结构如下:
.\myapp.exe
.\myapp.dll
.\Microsoft.VC80.CRT\
.\Microsoft.VC80.MFC\
.\Microsoft.VC80.MFC\Microsoft.VC80.MFCLOC\
然后修改Microsoft.VC80.MFCLOC目录下的Microsoft.VC80.MFCLOC.manifest文件,将其中的version="8.0.50727.42",修改为version="8.0.50608.0"。


方式二的目录结构,在xp和2003下是没有问题的,但是在win98/win2000中,因为exe和dll不在同一目录下,就会出现找不到dll的问题。

有什么更好的解决呢?呵呵,国外的一个大牛找到一绝招:

方式三、
 1、首先编译myapp.exe的时候,在配置中,选择生成单独的manifest文件,如:myapp.exe.manifest。
 2、将myapp.exe、myapp.exe.manifest拷贝到一个目录下
 3、将Microsoft.VC80.MFC、Microsoft.VC80.CRT、Microsoft.VC80.MFCLOC几个目录下的文件,都拷贝到myapp.exe所在的目录下。
 4、将Microsoft.VC80.MFCLOC.manifest文件中的version="8.0.50727.42",修改为version="8.0.50608.0"。
 5、编辑myapp.exe目录下的所有 .manifest文件,将文件中的publicKey键值删除,一般是publicKeyToken="1fc8b3b9a1e18e3b"
 6、然后运行myapp.exe看看,嗯。


OS | 评论(1) | 引用(167) | 阅读(37160)
jasion
2008/11/25 03:49
非常感谢,解决了我的大问题。
分页: 1/17 第一页 1 2 3 4 5 6 7 8 9 10 下页 最后页