共用方式為


應用程式 (可執行檔) 資訊清單

平台

用戶端– Windows 8伺服器– Windows Server 2012

描述

Windows 中引進的應用程式 (可執行檔) 資訊清單的相容性區段,可協助作業系統判斷應用程式設計的目標 Windows 版本。 此外,應用程式資訊清單可讓 Windows 根據應用程式的目標 Windows 版本,提供應用程式預期的行為。

資訊清單的相容性區段可讓 Windows 為新建立的軟體提供新行為,同時維持現有軟體的相容性。 本節也可協助 Windows 在未來的 Windows 版本中提供更高的相容性。 例如,在相容性區段中,只宣告對 Windows 8 支援的應用程式會繼續在未來的 Windows 版本中收到Windows 8行為。

表現

資訊清單中沒有相容性區段的應用程式預設會在 Windows 7 和Windows 8和未來的 Windows 版本上具有 Windows Vista 行為。 請注意,Windows XP 和 Windows Vista 會忽略此資訊清單區段,而且不會影響它們。

這些 Windows 元件會根據相容性區段提供不同行為:

遠端程序呼叫 (RPC) 預設執行緒集區

  • Windows 8和 Windows 7:若要改善延展性並減少執行緒計數,RPC 已切換至 NT 執行緒集區, (預設集區) 。 針對 Windows Vista,RPC 使用私人執行緒集區:

    • 針對針對 Windows 7 和更新版本的 Windows 編譯的二進位檔,會使用預設集區。
    • 如果在呼叫任何 RPC API 之前呼叫I_RpcMgmtEnableDedicatedThreadPool,則會使用私人執行緒集區 (Vista 行為) 。
    • 如果在 RPC 呼叫之後呼叫I_RpcMgmtEnableDedicatedThreadPool,則會使用預設集區,I_RpcMgmtEnableDedicatedThreadPool傳回錯誤 1764,而且不支援要求的作業。
  • Windows Vista (預設) :針對 Windows Vista 和舊版 Windows 編譯的二進位檔,會使用私人集區。

DirectDraw 鎖定

  • Windows 8和 Windows 7:針對 Windows 7 和更新版本的作業系統資訊清單的應用程式無法呼叫 DDRAW 中的鎖定 API 來鎖定主要桌面視訊緩衝區;這樣做會導致錯誤,並傳回主要複本的 Null 指標。 即使未開啟桌面視窗管理員組合,也會強制執行此行為。 針對 Windows 7 和更新版本宣告相容性的應用程式不得鎖定主要視訊緩衝區以進行轉譯。
  • Windows Vista (預設) :應用程式可以取得主要視訊緩衝區的鎖定,因為繼承應用程式相依于此行為;執行應用程式會關閉桌面視窗管理員。

DirectDraw 位區塊傳輸 (bitblt) 至主要複本,而不裁剪視窗

  • Windows 8和 Windows 7:Windows 7 和更新版本 Windows 的資訊清單應用程式無法對主要桌面視訊緩衝區執行位,而不需要裁剪視窗;這樣做會導致錯誤,而且不會轉譯 bitblt 區域。 即使您未開啟桌面視窗管理員組合,Windows 仍會強制執行此行為。 針對 Windows 7 和更新版本宣告相容性的應用程式必須對裁剪視窗執行位。
  • Windows Vista (預設) :應用程式必須能夠在沒有裁剪視窗的情況下對主要複本執行位,因為繼承應用程式相依于此行為;執行此應用程式會關閉桌面視窗管理員。

GetOverlappedResult API

  • Windows 8和 Windows 7:解決使用GetOverlappedResult的多執行緒應用程式可以在不重迭結構中重設事件的情況下傳回的競爭狀況,導致下一次呼叫此函式會提前傳回。
  • Windows Vista (預設) :提供應用程式可能相依于競爭條件的行為。 在 Windows 7 行為之前必須避免此競爭的應用程式應該等候重迭事件,並在收到訊號時,使用 bWait == FALSE 呼叫 GetOverlappedResult。

高對比模式中的殼層主題狀態

  • Windows 8:傳回處於高對比模式時的實際主題狀態。
  • Windows 7:在高對比模式下傳回主題無法使用,因為 DWM 仍在開啟。
  • Windows Vista (預設) :當處於高對比模式時,傳回主題無法使用,因為 DWM 仍在開啟。

Shell iPersistFile::Save 方法

  • Windows 8:CShellLink::Save 現在會判斷是否使用相對路徑引數呼叫 IPersistFile 處理常式,並在其為 時失敗呼叫。

    描述此行為的 公開檔 指出 path 引數必須是絕對路徑:

  • Windows 7 和更早版本 (預設) :CShellLink::Save 不會判斷 iPersistFile 處理常式是否傳送相對路徑檢查,並允許 app 繼續使用絕對路徑或相對路徑。

PCA) 程式相容性小幫手 (

  • Windows 8:具有相容性區段的應用程式不會獲得 PCA 風險降低。
  • Windows 7:追蹤相容性區段的應用程式是否有Windows 8變更的潛在相容性問題, (本檔) 中所述。
  • Windows Vista (預設) :在某些特定情況下,無法在執行時間期間正確安裝或當機的應用程式會獲得 PCA 防護功能。 如需詳細資訊,請參閱資源一節。

運用功能

使用作業系統支援的最新相容性資訊更新應用程式資訊清單。 本節說明資訊清單的新增專案:

命名 空間: Compatibility.v1 (xmlns=「urn:schemas-microsoft-com:compatibility.v1」 >)

區段名稱: 相容性 (新區段)

SupportedOS: 支援的作業系統 GUID - 對應至支援的作業系統的 GUID 如下:

  • {e2011457-1546-43c5-a5fe-008deee3d3f0}

    針對 Windows Vista:這是切換回溯內容的預設值

  • {35138b9a-5d96-4fbd-8e2d-a2440225f93a}

    針對 Windows 7:在應用程式資訊清單中設定此值的應用程式會取得 Windows 7 行為

  • {4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}

    適用于Windows 8:在應用程式資訊清單中設定此值的應用程式會取得Windows 8行為

Microsoft 會視需要為未來的 Windows 版本產生並張貼 GUID。

已更新資訊清單的 XML 範例:

注意

應用程式資訊清單中的屬性和標記名稱會區分大小寫。

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

上一個範例中所有作業系統的 GUID 提供下層支援。 支援多個平臺的應用程式不需要每個平臺的個別資訊清單。

測試

應用程式可以指定多個支援的作業系統識別碼。 如果您已測試或正在測試該作業系統上的應用程式,您應該新增支援的作業系統識別碼。 Windows Vista 和舊版作業系統不會注意這些專案。 從 Windows 7 開始,Windows 會選擇資訊清單中最高版本 GUID 到執行中的 Windows 版本,並在該層級提供應用程式支援。 若要確認應用程式可搭配新的應用程式資訊清單相容性區段運作:

  1. 使用新的相容性區段和 SupportedOS ID = { 4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} 測試應用程式,以確保應用程式使用最新的Windows 8行為正常運作。
  2. 使用新的相容性區段和 SupportedOS ID = {35138b9a-5d96-4fbd-8e2d-a2440225f93a} 測試應用程式,以確保應用程式使用 Windows 7 行為正常運作。
  3. 使用新的相容性區段和 SupportedOS ID = {e2011457-1546-43c5-a5fe-008deee3d3f0} 測試應用程式,以確保應用程式使用 Windows Vista 行為正常運作。

資源