應用程式資訊清單
受影響的平臺
用戶端 - Windows 7
伺服器 - 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。
PCA) 程式相容性小幫手 (
- Windows 7: [具有相容性的應用程式] 區段將不會取得 PCA 風險降低。
- Windows Vista (預設) : 在某些特定情況下,無法在執行時間期間正確安裝或當機的應用程式將會獲得 PCA 風險降低。 如需詳細資訊,請參閱參考一節。
利用功能
使用作業系統支援的最新相容性資訊更新應用程式資訊清單。 本節說明資訊清單的新增專案:
命名 空間: Compatibility.v1 (xmlns=「urn:schemas-microsoft-com:compatibility.v1」 >)
區段名稱: 相容性 (新區段)
SupportedOS: 支援的作業系統 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 之電腦上的 Windows 7 內容中執行,以取得其他詳細資料,並下載系統的正確版本。
已封鎖損毀傾印診斷
解決 方案移至 KB 976038 的Microsoft 支援服務頁面:從以 64 位版本的 Windows 執行的應用程式擲回的例外狀況會遭到忽略,以取得其他詳細資料。
其他資源的連結