應用程式 (可執行) 指令清單
平臺
用戶端 – Windows 8
Server – 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,而不需要裁剪視窗;這樣做會導致錯誤,而且不會轉譯 bitblt 區域。 即使您未開啟桌面視窗管理員組合,Windows 仍會強制執行此行為。 針對 Windows 7 和更新版本宣告相容性的應用程式必須對裁剪視窗執行 bitblt。
- 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 處理程式是否傳送相對路徑檢查,並允許應用程式繼續使用絕對或相對路徑。
Program Compatibility Assistant (PCA)
- Windows 8:相容性區段的應用程式不會取得 PCA 風險降低。
- Windows 7:追蹤相容性區段的應用程式是否有 Windows 8 變更的潛在相容性問題(本檔所述)。
- Windows Vista (預設):在某些情況下,無法在運行時間期間正確安裝或當機的應用程式獲得 PCA 風險降低。 如需詳細資訊,請參閱資源一節。
利用功能功能
使用作系統支援的最新相容性資訊更新應用程式指令清單。 本節描述指令清單的新增專案:
命名空間: Compatibility.v1 (xmlns=“urn:schemas-microsoft-com:compatibility.v1”>)
區段名稱: 相容性(新區段)
支援的OS: 支援的作系統 GUID - 對應至支援作系統的 GUID 為:
{e2011457-1546-43c5-a5fe-008deee3d3f0}
適用於 Windows Vista:這是切換回溯內容的預設值
{35138b9a-5d96-4fbd-8e2d-a2440225f93a}
for Windows 7:在應用程式指令清單中設定此值的應用程式會取得 Windows 7 行為
{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}
for 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 版本,並在該層級提供應用程式支援。 若要確認應用程式與新的應用程式指令清單相容性區段搭配運作:
- 使用新的相容性區段和 SupportedOS ID = { 4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} 測試應用程式,以確保應用程式使用最新的 Windows 8 行為正常運作。
- 使用新的相容性區段和 SupportedOS ID = {35138b9a-5d96-4fbd-8e2d-a2440225f93a} 測試應用程式,以確保應用程式使用 Windows 7 行為正常運作。
- 使用新的相容性區段和 SupportedOS ID = {e2011457-1546-43c5-a5fe-008deee3d3f0} 測試應用程式,以確保應用程式使用 Windows Vista 行為正常運作。
資源
- QueryActCtxW 函式
- UAC 指令清單
- 適用於 Windows 應用程式 的 應用程式指令清單
- 桌面視窗管理員 (DWM)
- 內容不符更新
- Program Compatibility Assistant