[一个小问题]Mainfest配置文件的version问题小结

  问题起源自己安装好产品的新build,然后用自己本地编译出来的其中一个DLL去替换到产品中,本来以为可以正常执行,但是却发现这个新DLL无法被Load,无法被使用。

  从Event Viewer里找到了问题描述:

  ----------------------------------------------------------------------------------------------------

Activation context generation failed for "C:\Program Files\Trend Micro\Messaging Security Agent\instDeferredCustomAction.dll".Error in manifest or policy file "C:\Program Files\Trend Micro\Messaging Security Agent\Microsoft.VC80.MFC.MANIFEST" on line 4. Component identity found in manifest does not match the identity of the component requested.

  Reference is Microsoft.VC80.MFC,processorArchitecture="amd64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.4053".

  Definition is Microsoft.VC80.MFC,processorArchitecture="amd64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.762".

  Please use sxstrace.exe for detailed diagnosis.

  ----------------------------------------------------------------------------------------------------

  解决方法:

    只需到产品安装目录下找到Microsoft.VC80.MFC.MANIFEST文件,然后修改其version从762变为4053即可

  问题原因:

  我们的产品由visual studio 2005开发,依赖于Microsoft Visual C++ 2005(用户的电脑需安装vcredist_x86.exe,vcredist_x64.exe),我在本地开发时VC的版本是4053(原因是我安装了Visual C++ 2005 SP1 KB971090的安全更新,VC生成的manifest中引用的ATL/MFC/CRT库的版本从8.0.50727.762变成了8.0.50727.4053),而出build的机器其编译时依赖的VC版本是762(http://www.microsoft.com/zh-cn/download/details.aspx?id=5638),所以导致运行时出现此问题。

  知识扩展:

  1. Event Viewer对此定性为error,描述为SideBySide错误,什么是SideBySide?

  从Visual Studio 2005开始,微软创造了SideBySide DLL,创造这种DLL的初衷是许多程序可能会使用不同version的DLL,如果同一个DLL被替换为新version的DLL,可能会导致程序Crash(称之为DLL Hell),SideBySide DLL正为解决这一问题,也就有了Mainfest文件(与可执行程序或DLL相关)来指明哪个version的DLL可以被执行。Mainfest是个XML的描述文件,对于每个DLL有DLL的Manifest文件,对于每个应用程序Application也有自己的Manifest。

  目前对于这个问题的理解至此,希望今后遇到问题都能及时查找原因。不断进步:)

  参考:

  1. Working with Visual Studios C++ manifest files

http://stackoverflow.com/questions/588712/working-with-visual-studios-c-manifest-files

  2. manifest的作用

http://www.cppblog.com/kyelin/archive/2010/10/09/129163.html

  3. 终结VC2005分发包版本问题

http://www.cnblogs.com/mixiyou/archive/2010/02/09/1663620.html

  Best Regards

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏木制robot技术杂谈

Hexo搭建个人博客(三)—— Hexo博客的美化

通过前两节的学习,我们已经搭建好自己的博客,就像盖房子一样要对内部进行装修,也就是对博客进行美化。 ---- 安装Hexo博客主题 Hexo博客可以安装不同的...

6979
来自专栏友弟技术工作室

(效率人生)MAC必备工具Alfred入门使用前言如何获取Alfred如何打开AlfredGeneral(通用界面)Features(特性界面)Advanced(高级设置)

1. General:通用; 2. Features:特性; 3. Workflows:工作流; 4. Appearance:外观; 5...

511
来自专栏小狼的世界

Vimperator:玩酷你的Firefox

First there was a Navigator, then there was an Explorer. Later it was time for a...

934
来自专栏coding

swoole框架-swoft实现程圣母与云天明对话功能启动ws服务创建http服务的聊天控制器创建视图文件创建ws控制器结果演示

当万有引力号启动广播按钮,向宇宙发送三体星的坐标时,地球已经失去了任何侵略价值。三体人将所有在地球的资源全部撤走,但在临别时,安排了程圣母与云天明的远程会话。接...

1082
来自专栏程序猿

Burp Suite第十五节:BurpSuite全局参数设置和使用

在Burp Suite中,存在一些粗粒度的设置,这些设置选项,一旦设置了将会对Burp Suite的整体产生效果,这就是Burp Suite中Op...

3658
来自专栏源哥的专栏

"struts中文问题","struts国际化问题"的终极解决方案[转载]

Java本身就支持多国语言编码,不需要写任何程序,可以很简单的 实现。 秘诀就是两点:

691
来自专栏圣杰的专栏

ABP入门系列(21)——切换MySQL数据库

源码路径:Github-LearningMpaAbp 1. 引言 Abp支持MySql已经不是什么新鲜事了,但按照官方文档:Entity Framework...

2179
来自专栏七夜安全博客

Scrapy爬取美女图片第三集 代理ip(上)

1314
来自专栏贾鹏辉的技术专栏@CrazyCodeBoy

FileProvider无法获取外置SD卡问题解决方案 | Failed to find configured root that contains

尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://www.devio.org) 随着Android版本越来越高,Android官方对...

4488
来自专栏C#

创建基于MailKit和MimeKit的.NET基础邮件服务

       邮件服务是一般的系统都会拥有和需要的功能,但是对于.NET项目来说,邮件服务的创建和使用会较为的麻烦。.NET对于邮件功能提供了System.Ne...

1230

扫码关注云+社区