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

在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

PS:如需转载请注明出处,谢谢!

时间: 2024-10-26 16:56:33

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

Win7/Win8下双击运行jar程序的方法

问题 老妈喜欢看小说,又不会下载,于是用Java写了个自动下载小说的小程序 我用的Swing UI,直接生成了.jar文件,双击即可运行 很诡异的是,用Eclipse直接run可以运行,但是Export出jar文件以后双击却没有反应 探究 怀疑是不是Eclipse的导出功能坏掉了,于是用了flatjar等工具重新打包,仍然不行 走了很多弯路以后终于Google到了问题的所在: win7/win8的jar文件默认关联的程序是java.exe而不是javaw.exe 在右键 -> 打开方式里面这两个

解决Xilinx_ISE在Win8下打开崩溃闪退的方法

解决Xilinx_ISE在Win8下打开崩溃闪退的方法 在64位windows8或者8.1上安装xilinx ise之后,加载 licence或者保存文件的时候,ise应用程序就会崩溃,出现闪退的情况. 修复方法: 第一步: 找到xilinx安装文件下的子文件,我的是安装在D盘. [plain] view plaincopy D:\Xilinx\14.4\ISE_DS\ISE\lib\nt64 在这个文件夹中搜索文件 libPortability 会出来两个文件 [plain] view pla

解决谷歌浏览器在win8下没有注册类的问题

在网上搜索了很多方法,终于找到一种有用的,分享下 新建一个txt,里面存放代码 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ChromeHTML\shell\open\command] @="\"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\" -- \"%1\"&quo

win7 win8下 dvorak 的安装和练习

介绍:http://www.kaufmann.no/roland/dvorak/ 看不懂的去百度百科dvorak 下载  http://www.kaufmann.no/downloads/winnt/kbddvp-1_2_4-i386.exe 下载的是程序员dvorak 然后添加输入法 安装好了! 推荐五笔    因为dvorak对拼音不友好,会有很多左手单手连打 下面是键盘练习部分,自己做了一个页面 代码如下 <!doctype html> <html> <head>

Win7/Win8下双击执行jar程序的方法

问题 老妈喜欢看小说,又不会下载,于是用Java写了个自己主动下载小说的小程序 我用的Swing UI.直接生成了.jar文件,双击就可以执行 非常诡异的是.用Eclipse直接run能够执行,可是Export出jar文件以后双击却没有反应 探究 怀疑是不是Eclipse的导出功能坏掉了,于是用了flatjar等工具又一次打包,仍然不行 走了非常多弯路以后最终Google到了问题的所在: win7/win8的jar文件默认关联的程序是java.exe而不是javaw.exe 在右键 -> 打开方

windows7下修改hosts文件无效解决办法

通常会为了开发方便.或者屏蔽掉一些恶意网站,我们会在hosts(c:\windows\system32\drivers\etc\hosts)文件中进行相应的域名指向,例: 在上图中,我们可以看到,将www.ywec.com指向到了127.0.0.1,在命令行下ping一下该域名,我们发现它已经被指向到了127.0.0.1,有时我们做了如上述所示操作后,发现域名仍然是指向原IP,这是怎么回事呢?一般情况下会有如下几种情况 1.该文件保存时未使用ansi编码进行保存,解决办法:更改文件编码为ansi

windows7下修改hosts文件无效解决办法(转)

通常会为了开发方便.或者屏蔽掉一些恶意网站,我们会在hosts(c:\windows\system32\drivers\etc\hosts)文件中进行相应的域名指向,例: 在上图中,我们可以看到,将www.ywec.com指向到了127.0.0.1,在命令行下ping一下该域名,我们发现它已经被指向到了127.0.0.1,有时我们做了如上述所示操作后,发现域名仍然是指向原IP,这是怎么回事呢?一般情况下会有如下几种情况 1.该文件保存时未使用ansi编码进行保存,解决办法:更改文件编码为ansi

【云计算】Docker容器不能修改hosts文件怎么解决?

参考资料: http://bbs.csdn.net/topics/390871429 http://tieba.baidu.com/p/4295556808 http://stackoverflow.com/questions/27357253/docker-run-append-to-etc-hosts-in-dockerfile-not-working

MySQL的my.cnf文件(解决5.7.18下没有my-default.cnf)

官网说:从5.7.18开始不在二进制包中提供my-default.cnf文件.参考:https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html 经过测试,在5.7.18版本中,使用tar.gz安装时,也就是压缩包解压出来安装这种,已经不再需要my.cnf文件也能正常运行. my.cnf文件就是把在命令行上启动MySQL时后面的参数用cnf文件配置好,那么下载启动时就不再需要在命令上加如参数. 这个my.cnf文件可以是自定义位