您的位置:首页 > 其它

Windows应用程序WinSXS部署问题小结

2012-02-17 21:43 267 查看
在开发机器上跑得好好的程序,一拷贝到别人的机器上,经常无法启动,提示:

“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题”

出现这个问题的原因是应用程序使用了Windows的WinSXS机制。程序依赖的某些系统dll(c运行库、MFC),按照不同的系统架构(x86,amd64)发行方式(debug\release)、发布版本(50608\50727等),分文件夹存放在windows/winsxs目录下。如果应用程序需要的某个dll,无法在待安装的机器上找到,就会报出上面的错误。

随安装程序附带所需的dll,或者使用静态链接,可能可以解决这个问题。这里列一些不好修改应用程序时的解决办法。

首先需要取得应用程序的manifest清单文件。这个清单文件记录了程序依赖的系统动态链接库的名称和版本号。如果程序选择不嵌入清单文件,则这个文件就在应用程序目录下,文件名为“应用程序名称.exe.manifest”。否则需要使用mt.exe或者resource hacker从应用程序里解出这个文件。

这个文件其实是个xml文件,里有一些depend段,每个段对应一个dll依赖。根据depend段的描述,从开发机器的winsxs目录拷出相应的dll版本文件夹到目标机器上。注意winsxs目录下有一个Manifest目录,里面有一些dll自己的manifest文件,也需要拷贝到目标机器上。有时某个dll在开发机器上都找不到,可以删除掉对应的depend段试试。

如果做完这些,应用程序在目标机器上还是跑不起来。可以把dll和manifest文件拷贝到应用程序目录下,把manifest改成规范些的名称,例如vc2005的release版c运行库,manifest改名为“Microsoft.VC80.CRT.MANIFEST”再试试。

如果以上办法都不奏效,可以用ProcessMonitor这个工具,监视一下应用程序启动时尝试打开了哪些文件,例如在ProcessMonitor里搜索manifest里dll库的版本号,看看应用程序自己是用什么路径、什么文件名来尝试打开dll的。把manifest文件放到这些路径下,改成对应名称,没准就可以运行了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: