“由于应用程序配置不正确,应用程序未能启动”

主要针对 VC9 编译出来的程序,这个问题我曾经以为在《VC2005 的程序文件分发问题及解决》里已经搞清楚了:(

1. 到目前为止,我机器上的 VC9 运行库版本有三个:21022.8(对应 RTM)、30729.1(对应 SP1)、30729.4148(对应 ATL 更新),其中 WinSXS 目录下三个版本都有,而 VC9 安装目录下只有最新的 30729.4148 版本。

2. 默认情况下,VC9 编译出来的程序,内含的 manifest 文件中指定的是 21022.8 版本,这个与 VC8 的默认处理是不一样的(绑定最新版本),主要目的是防止用户只更新程序文件而不更新运行库导致程序无法运行的情况。

3. 那如果机器里只安装了最新版本的 vcredist_x86.exe 呢?没关系,安装包会生成相应的 policy 文件,尽管程序要求的是 21022.8 版本,也会重定向到最新的版本比如 30729.4148 上,嗯,灵活性不错。

4. 如果在 VC9 的项目属性中预定义了 _BIND_TO_CURRENT_VCLIBS_VERSION(还有几个子定义,分别针对 CRT、MFC 等),则绑定的是最新版本(和 VC8 一样了),感觉这样做的意义不是不大,除非程序依赖于最新版本的运行库才能正确运行。

5. 针对我原来的那篇帖子,如果要采用私有程序集的部署方法,要注意 Microsoft.VC80.DebugCRT 等目录中的 manifest 文件所描述的版本(一般是最新版本)是否与应用程序要求的版本(默认为旧版本)一致,不一致的话,可以把前者手工改一下,呵呵,算是欺骗行为了。

6. 其实也可以手工完成 vcredist_x86.exe 的工作,注意不只是 WinSXS 下的几个目录,还有 Manifests 和 Policies 目录下相应的目录或文件也要齐全。

PS. 参考资料:http://hi.baidu.com/fairysky/blog/item/e7a8366dbaa735f3431694c8.html

 

This entry was posted in 软件开发 and tagged , . Bookmark the permalink.

1 条 “由于应用程序配置不正确,应用程序未能启动” 的回复

  1. Pingback: Windows XP 上运行 Angry Birds | 江南西道

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s