ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

通过修改manifest文件来解决Vista/Win7/Win8下应用程序兼容性问题

2020-09-08 09:03:46  阅读:383  来源: 互联网

标签:文件 Vista 兼容性 Win7 应用程序 manifest Win8 exe 兼容性问题


 在Vista/Win7/Win8下,有一个系统兼容性助手功能,在安装程序安装完成或卸载完成后,可能会弹出应用程序兼容性助手相关的提示,提示程序可能安装不正确,很是烦人。如下图所示:

事实上,我们的程序兼容性是没问题的,只不过是在程序中没有指定应用程序兼容的操作系统,所以导致了这些问题。

        VS2008和VS2010可以生成一个与exe应用程序相关联的.manifest文件,微软已经为该文件中添加了一个新的<compatibility> 字段, 这个字段用来指定你的应用程序可以兼容的操作系统,进而可以解决程序兼容性问题。

        .menifest文件是一个随工程编译产生的xml文件,作用是为操作系统提供了对应用程序部分信息的描述,每个exe程序或者dll都必须有一个manifest,对于应用程序而言,可以是一个和exe文件同一目录下的.manifest文件,也可以是作为一个资源嵌入在exe文件内部的(通过修改项目配置manifest tool->input output->Embed Manifest->yes), 如果应用程序没有.manifest文件,则会提示丢失MSVCR90D.dll,无法运行。

          以下是添加了<compatibility> 字段的manifest文件,添加了对Vista/Win7/Win8系统的兼容性的支持:

[html] view plaincopy    
  1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>    
  2.   <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">    
  3.       <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">    
  4.           <application>    
  5.               <!--The ID below indicates application support for Windows Vista -->    
  6.               <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>   
  7.               <!--The ID below indicates application support for Windows 7 -->    
  8.               <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>   
  9.               <!--The ID below indicates application support for Windows 8 -->    
  10.               <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>  
  11.           </application>    
  12.      </compatibility>    
  13.    </assembly>   

        如果你的项目会生成一个.manifest文件的话,也就是不是内嵌模式,直接修改该文件,重新编译即可。如果你的项目设置的是将.manifest文件内嵌到应用程序内部,则你需要先修改为非内嵌模式,编译,生成.manifest文件,修改该文件后,再将工程属性改为内嵌模式。同时将修改后的.manifest文件通过additional manifest file 选项添加到工程里面,重新编译即可。(好像直接编写一个上述内容的.manifest文件,文件名:exe名称.exe.manifest,然后将清单设置为内嵌模式,直接将manifest文件添加到工程中编译即可)

        本篇文章之前是参考了:http://blog.csdn.net/rainkop/article/details/8065297(标题:通过修改程序解决win7下应用程序兼容性助手弹出),原文中提到了解决win7中兼容性的办法,于是也想使用同样的处理,但是win8系统的ID是多少呢?

        上网搜了很久也没有找到,后来抱着试试看的想法使用win7的ID号(35138b9a-5d96-4fbd-8e2d-a2440225f93a),搜了找到了Microsoft的一个官方文档,结果该文档对兼容性进行了详细的说明,进而找到了Win8的系统的ID,才得以解决Win8上的兼容性问题。文档的名称为“Windows 8 和 Windows Server 2012兼容性手册”,主题是有关 Windows 兼容性、可靠性以及性能的开发人员指南。文档下载链接:http://download.csdn.net/detail/chenlycly/8821847

标签:文件,Vista,兼容性,Win7,应用程序,manifest,Win8,exe,兼容性问题
来源: https://www.cnblogs.com/guanshan/p/guan2020-9-8_001.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有