受影響的平臺
用戶端 - Windows 7
Server - Windows Server 2008 R2
功能影響
嚴重性 - 低
頻率 - 低
描述
Windows 7 在應用程式指令清單中引進了稱為「相容性」的新區段。本節可協助 Windows 判斷應用程式設計的目標 Windows 版本,並讓 Windows 根據應用程式目標 Windows 版本提供應用程式預期的行為。
[相容性] 區段可讓 Windows 為新開發人員建立的軟體提供新行為,同時維護現有軟體的相容性。 本節也可協助 Windows 在未來版本的 Windows 中提供更高的相容性。 例如,只有在 [兼容性] 區段中宣告僅支援 Windows 7 的應用程式,在未來版本的 Windows 中仍會繼續接收 Windows 7 行為。
變更的表現
其指令清單中沒有相容性區段的應用程式預設會在 Windows 7 和未來的 Windows 版本上收到 Windows Vista 行為。 請注意,Windows XP 和 Windows Vista 會忽略此指令清單區段,而且不會影響它們。
下列 Windows 元件會根據 Windows 7 中的相容性區段提供不同的行為:
RPC 預設線程集區
-
Windows 7: 為了改善延展性並減少線程計數,RPC 切換至 NT 線程集區(預設集區)。 針對 Windows Vista,RPC 使用私人線程集區。
- 針對針對 Win7 編譯的二進位檔,會使用預設集區
- 如果在呼叫任何 RPC API 之前呼叫I_RpcMgmtEnableDedicatedThreadPool,則會使用私人線程集區 (Vista 行為)
- 如果在 RPC 呼叫之後呼叫I_RpcMgmtEnableDedicatedThreadPool,則會使用預設集區,I_RpcMgmtEnableDedicatedThreadPool傳回錯誤 1764,而且不支援要求的作業
- Windows Vista (預設值): 針對 Windows Vista 和以下編譯的二進位檔,會使用私人集區。
DirectDraw 鎖定
- Windows 7: Windows 7 指令清單的應用程式無法呼叫 DDRAW 中的鎖定 API 來鎖定主要桌面視訊緩衝區。 這樣做會導致錯誤,而且會傳回主要複本 NULL 指標。 即使未開啟桌面視窗管理員組合,仍會強制執行此行為。 Windows 7 相容應用程式不得鎖定要轉譯的主要視訊緩衝區。
- Windows Vista(預設值): 應用程式將能夠在主要視訊緩衝區上取得鎖定,因為舊版應用程式相依於此行為。 執行應用程式會關閉桌面視窗管理員。
DirectDraw 位區塊傳輸 (Blt) 到主要,而不裁剪視窗
- Windows 7: 針對 Windows 7 指令清單的應用程式無法執行 Blt 到主要桌面視訊緩衝區,而不需要裁剪視窗。 這樣做會導致錯誤,而且不會轉譯Blt區域。 即使您未開啟桌面視窗管理員組合,Windows 仍會強制執行此行為。 Windows 7 相容應用程式必須Blt到裁剪視窗。
- Windows Vista (預設值): 應用程式必須能夠在沒有裁剪視窗的情況下,將應用程式 Blt 到主要復本,因為舊版應用程式相依於此行為。 執行此應用程式會關閉桌面視窗管理員。
GetOverlappedResult API
- Windows 7: 解決使用 GetOverlappedResult 的多線程應用程式可以傳回而不重設重疊結構中的事件,導致下一次呼叫此函式時過早傳回的競爭狀況。
- Windows Vista (預設值): 提供應用程式可能相依於競爭條件的行為。 想要在 Windows 7 行為之前避免此競爭的應用程式應該等候重疊事件,並在收到訊號時,使用 bWait == FALSE呼叫 GetOverlappedResult。
Program Compatibility Assistant (PCA)
- Windows 7: 相容性應用程式一節不會取得 PCA 風險降低。
- Windows Vista (預設值): 在某些情況下,無法在運行時間期間正確安裝或當機的應用程式,將會獲得 PCA 風險降低。 如需詳細資訊,請參閱參考一節。
利用功能功能
使用作系統支援的最新相容性資訊更新應用程式指令清單。 本節描述指令清單的新增專案:
命名空間: Compatibility.v1 (xmlns=“urn:schemas-microsoft-com:compatibility.v1”>)
區段名稱: 相容性(新區段)
支援的OS: 支援的作系統 GUID - 對應至支援作系統的 GUID 為:
- {e2011457-1546-43c5-a5fe-008deee3d3f0} for Windows Vista:這是切換回溯內容的預設值。
- {35138b9a-5d96-4fbd-8e2d-a2440225f93a} for Windows 7:在應用程式指令清單中設定此值的應用程式會取得 Windows 7 行為。
注意
Microsoft會視需要產生及張貼未來 Windows 版本的 GUID。
以下是已更新指令清單的範例。
注意
應用程式指令清單中的屬性和標籤名稱會區分大小寫。
<?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 application support for Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!--The ID below indicates application support for Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
</application>
</compatibility>
</assembly>
在上述範例中為這兩個作系統新增 GUID 的值,就是提供下層支援。 支援這兩個平臺的應用程式不需要每個平台的個別指令清單。
相容性、效能、可靠性和可用性測試
- 使用新的相容性區段和
SupportedOS ID ={35138b9a-5d96-4fbd-8e2d-a2440225f93a}
測試應用程式,以確保應用程式使用最新的 Windows 7 行為正常運作 - 使用新的相容性區段和
SupportedOS ID ={e2011457-1546-43c5-a5fe-008deee3d3f0}
測試應用程式(或完全沒有本節),以確保應用程式在 Windows 7 上使用 Windows Vista 行為正常運作
已知問題
內容不相符 應用程式會在 Windows Vista 內容中執行,而不是在執行 Windows 7 或 Windows Server 2008 R2 之 x64 版本的電腦上的 Windows 7 內容中執行。
解決方案 更新可用於更正所有支援的 x64 型 Windows 7 和 Windows Server 2008 R2 版本,以及所有支援的 Itanium 版本 Windows Server 2008 R2。 移至 KB 978637的 [Microsoft支援] 頁面:應用程式會在 Windows Vista 內容中執行,而不是在執行 Windows 7 或 Windows Server 2008 R2 x64 版或 Windows Server 2008 R2 的電腦上執行應用程式,以取得其他詳細數據,並下載系統的正確版本。
損毀傾印診斷已封鎖
解決方案 移至 KB 976038 的 [Microsoft支援] 頁面:會忽略在 64 位版本 Windows 中執行的應用程式擲回的例外狀況,以取得其他詳細數據。
其他資源的連結
- QueryActCtxW 函式
- UAC 指令清單
- 適用於 Windows 應用程式 的 應用程式指令清單
- 桌面視窗管理員 (DWM)
- 內容不符更新