QQ 便携版试作(失败)
QQ 从一开始就是很便携的,虽然它的体积一直在长。直到 QQ2009,如果你是复制或重装系统的话便有可能遇到配置不正确的问题。

这时如果你打开事件查看器的话,便会看到三条 SideBySide 错误消息。




SideBySide Assembly 是微软在 VS2005 中引进的技术,用来解决 DLL Hell 问题。DLL Hell 其实就是不同版本的兼容问题。SideBySide 管理程序的 DLL,在程序调用的时候告诉程序,你需要的 X 版本的 DLL 在目录 Y。 找不到的话就提示使用者“配置错误”。
QQ 依赖的是 VC2005 运行库,出现这个问题的话只要安装运行库就可以了。对于便携版来说,这便有的系统依赖。在没有安装的系统上还是会出现错误。
对于“配置错误”的另一个办法就指定 DLL ,将需要的 DLL 放到程序目录。把下载的 QQ 安装文件解开后可以找到 VC 运行库文件夹,复制到 QQ 的 Bin 目录下。这时运行QQ,成功了吗?答案是否定的,对于 QQ 来说还有其它问题。





系统消息说标识不匹配?这次失败的是 Common.dll 了。使用 ResEdit 打开查看内置的 manifest 文件。
再打开其它文件看看,还有 4053 和 762 两版本混用的。这种情况下让系统自己去处理,但是指定 DLL 似乎没有解决的办法,只好修改内置的 manifest 文件,先用下面的命令导出:
for %i in (*.exe) do mt -inputresource:%i;#1 -out:%i.manifest for %i in (*.dll) do mt -inputresource:%i;#2 -out:%i.manifest
然后修改导出的 manifest 文件,762 改为 4053,删除重复的依赖(一个文件里同时依赖两个版本,囧)。最后把改好的 manifest 文件导回去,同样用命令:
for %i in (*.exe.manifest) do mt -manifest %i -outputresource:%~ni;#1 for %i in (*.dll.manifest) do mt -manifest %i -outputresource:%~ni;#2
同时依赖两的版本的会导不进去,先在 ResEdit 里删除 manifest 就可以了。现在,大功告成,再运行,是不是熟悉的 QQ 登录窗口。别高兴太早,填写账号密码登录。



囧,或许在 SideBySide 上想办法才是正道。
参考资料:
小李贼 Side-by-Side Assembly相关
熊力 WinSxS SidebySide 和 淘宝旺旺

Leave a Reply