通過修改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

轉自http://blog.csdn.net/chenlycly/article/details/9071151

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章