Windows 傳統型橋接器應用程式測試

傳統型橋接器應用程式 (請參閱從程式碼建置 MSIX 套件) 是使用傳統型橋接器轉換成通用 Windows 平台 (UWP) 應用程式的 Windows 傳統型應用程式。 轉換之後,Windows 傳統型應用程式就會以目標為 Windows 10 Desktop 的 UWP 應用程式套件形式 (.appx 或 .appxbundle) 來封裝、維護及部署。

必要與選擇性測試

適用於 Windows 傳統型橋接器應用程式的選擇性測試僅供參考,並不會用來在 Microsoft Store 上架期間評估您的應用程式。 建議調查這些測試結果,以製作品質良好的應用程式。 市集上架的整體成功/失敗條件是由必要測試所決定,而非這些選擇性測試。

目前選擇性測試

1.數位簽署的檔案測試

背景
此測試會確認所有可攜式執行檔 (PE) 都包含有效的簽章。 如果有數位簽署的檔案,即可讓使用者知道軟體是正版。

測試詳細資料
測試會掃描套件中的所有可攜式執行檔,並檢查其標頭是否有簽章。 建議對所有 PE 檔案進行數位簽署。 如果未簽署任何 PE 檔案,則會產生警告。

修正動作
一律建議具有數位簽署的檔案。 如需詳細資訊,請參閱程式碼簽署簡介 \(英文\)。

2.檔案關聯動詞

背景
此測試會掃描套件登錄,確認是否登錄任何檔案關聯動詞。

測試詳細資料
運用各式各樣的 Windows 執行階段 API,可以增強已轉換的傳統型應用程式。 此測試會檢查應用程式中的 UWP 二進位檔案未呼叫非 Windows 執行階段 API。 UWP 二進位檔案已設定 AppContainer 旗標。

修正動作
如需這些延伸模組的說明,請參閱傳統型轉 UWP 橋接器:應用程式延伸模組,以及如何正確使用。

3.偵錯設定測試

此測試會確認 .msix 或 appx 不是偵錯組建。

背景
若要通過 Microsoft Store 的認證,應用程式不可以針對偵錯進行編譯,而且不可以參照可執行檔案的偵錯版本。 此外,您必須針對您的應用程式建置最佳化的程式碼以便通過此測試。

測試詳細資料
請測試應用程式,確定不是偵錯組建,而且並未連結到任何偵錯架構。

修正動作

  • 將應用程式提交至 Microsoft Store 之前,將其建置為版本組建。
  • 請確定您已安裝正確的 .NET Framework 版本。
  • 請確認應用程式並未連結到偵錯版本的架構,且是利用發行版本所建置。 如果這個應用程式包含 .NET 元件,請確認您已安裝正確的 .NET Framework 版本。

4.套件例行性測試

4.1 封存檔案的使用方式

背景
此測試可協助您建置更好的傳統型橋接器應用程式,以便在 Windows 10 S 電腦上執行。

測試詳細資料
此測試會檢查封存檔案或自我解壓縮內容中的所有可執行檔。 因為這種類型的內容內含的可執行檔在上架到 Windows 市集時未經簽署,應用程式可能無法如預期般在 Windows 10 S 系統上執行。

修正動作

  • 考慮評估測試已標幟的檔案,判斷是否會對 Windows 10 S 環境中執行的應用程式產生影響。
  • 如果您的應用程式會受影響,請從封存檔案移除可執行檔,而且不要使用自我解壓縮封存將可執行檔放在磁碟上。 這樣應該可避免應用程式功能喪失。

4.2 封鎖的可執行檔

背景
此測試可協助您建置更好的傳統型橋接器應用程式,以便在 Windows 10 S 電腦上執行。

測試詳細資料
此測試會檢查應用程式是否在嘗試啟動可執行檔,這種嘗試在 Windows 10 S 系統受到限制。 需依賴此功能的應用程式可能無法如預期般在 Windows 10 S 系統上執行。

修正動作

  • 識別測試中的哪些已標幟的項目表示要啟動不屬於應用程式之可執行檔的呼叫,然後移除那些呼叫。
  • 如果已標幟的檔案屬於您的應用程式的一部分,則可以忽略警告。

目前的必要測試

1.應用程式功能測試 (特殊用途功能)

背景
特殊用途功能適用於非常特殊的情況, 僅限公司帳戶使用這些功能。

測試詳細資料
驗證應用程式是否宣告下列任一功能:

  • EnterpriseAuthentication
  • SharedUserCertificates
  • DocumentsLibrary

如果宣告了任何上述功能,測試就會向使用者顯示警告。

修正動作
請考慮移除應用程式不需要的特殊用途功能。 此外,這些功能的使用方式需接受其他上架原則審查規範。

2.應用程式資訊清單資源測試

2.1 應用程式資源驗證

如果應用程式資訊清單中宣告的字串或影像不正確,就無法正確地安裝應用程式。 如果應用程式安裝時包含這些錯誤,就無法正確地顯示應用程式的標誌或其他影像。

測試詳細資料
請檢查應用程式資訊清單中定義的資源,確定它們存在並且有效。

修正動作
使用下表作為指南。

錯誤訊息 註解
影像 {image name} 同時定義 Scale 和 TargetSize 限定詞二者;一次只能定義一個限定詞。 您可以針對不同的解析度自訂影像。 在實際訊息中,{image name} 包含有錯誤的影像名稱。 請確定每個影像都將 Scale 或 TargetSize 定義為限定詞。
影像 {image name} 不符合大小限制。 請確定所有應用程式影像都遵守適當的大小限制。 在實際訊息中,{image name} 包含有錯誤的影像名稱。
封裝中沒有影像 {image name}。 缺少必要的影像。 在實際訊息中,{image name} 包含缺少的影像名稱。
影像 {image name} 不是有效的影像檔。 請確定所有應用程式影像都遵守適當的檔案格式類型限制。 在實際訊息中,{image name} 包含無效的影像名稱。
影像「BadgeLogo」在位置 (x, y) 的 ABGR 值 {value} 無效。 像素必須是白色 (##FFFFFF) 或透明 (00######) 徽章標誌是出現在徽章通知旁邊的影像,用以在鎖定畫面識別應用程式。 這個影像必須為單色 (只能包含白色和透明像素)。 在實際訊息中,{value} 包含影像中無效的色彩值。
影像「BadgeLogo」在位置 (x, y) 的 ABGR 值 {value} 對於高對比白色影像無效。 像素必須是 (##2A2A2A) 或較深,或透明 (00######)。 徽章標誌是出現在徽章通知旁邊的影像,用以在鎖定畫面識別應用程式。 因為在高對比白色中,徽章標誌會出現在白色背景上,所以它必須是正常徽章標誌的深色版本。 在高對比白色中,徽章標誌只能包含比 (##2A2A2A) 深的像素或透明。 在實際訊息中,{value} 包含影像中無效的色彩值。
影像至少必須定義一個不含 TargetSize 限定詞的變數。 它必須定義 Scale 限定詞,或不指定 Scale 和 TargetSize,預設值為 Scale-100。 如需詳細資訊,請參閱回應式設計 \(部分機器翻譯\) 與應用程式資源的指南。
套件缺少 "resources.pri" 檔案。 如果您的應用程式資訊清單中有可當地語系化的內容,應用程式封裝中請務必包含有效的 resources.pri 檔案。
"resources.pri" 檔案必須包含資源對應,且名稱符合套件名稱 {package full name} 如果資訊清單已變更,而 resources.pri 中的資源對應名稱不再符合資訊清單中的套件名稱,就會發生這個錯誤。 在實際訊息中,{package full name} 包含 resources.pri 必須包含的封裝名稱。 若要修正此問題,您需要重建 resources.pri,最簡單的方式就是重建應用程式的套件。
「resources.pri」檔案不能啟用 AutoMerge。 MakePRI.exe 支援一個稱為 AutoMerge 的選項。 AutoMerge 的預設值為 off。 啟用時,AutoMerge 會在執行階段將應用程式的語言套件資源合併至單一 resources.pri 中。 對於您在想要透過 Microsoft Store 發佈的應用程式,我們不建議使用這個選項。 透過 Microsoft Store 發佈的應用程式,其 resources.pri 必須位於應用程式套件的根目錄,而且包含應用程式支援的所有語言參考。
字串 {string} 不符合 {number} 個字元的長度上限限制。 請參閱應用程式封裝需求。 在實際訊息中,{string} 會以發生錯誤的字串取代,而 {number} 包含長度上限。
字串 {string} 的開頭/結尾不得具有空白字元。 應用程式資訊清單中的元素結構描述不允許前後有空白字元。 在實際訊息中,{string} 會以有錯誤的字串取代。 請確定 resources.pri 中資訊清單欄位的當地語系化值沒有任何前置或空白字元。
字串必須為非空白 (長度大於零) 如需詳細資訊,請參閱應用程式封裝需求
"resources.pri" 檔案中沒有指定預設資源。 如需詳細資訊,請參閱應用程式資源的指南。 在預設建置組態中,當產生套件組合、將其他資源放在資源套件中時,Visual Studio 只會在應用程式套件中包含縮放 200 的影像資源。 請確定您包含縮放 200 影像資源,或將您的專案設定為包含您所擁有的資源。
「resources.pri」檔案中沒有指定資源值。 請確定應用程式資訊清單會在 resource.pri 中定義有效的資源。
影像檔 {filename} 必須小於 204800 個位元組。 請降低所指示之影像的大小。
{filename} 檔案不應包含反向對應區段。 若呼叫 makepri.exe 時在 Visual Studio「F5 偵錯」期間產生反向對應,則可藉由在產生 pri 檔案時,執行 makepri.exe 但不加上 /m 參數來移除它。

2.2 商標驗證

背景
傳統型橋接器應用程式應該要完整且功能正常。 使用預設影像 (來自範本或 SDK 範例) 的應用程式會呈現不佳的使用者經驗,而且在市集型錄中也不容易識別。

測試詳細資料
這個測試會驗證應用程式所使用的影像不是來自 SDK 範例或 Visual Studio 的預設影像。

修正動作
以更特別且更能代表您應用程式的影像取代預設影像。

3.套件合規性測試

3.1 應用程式資訊清單

測試應用程式資訊清單的內容,確定內容正確無誤。

背景
應用程式必須包含格式正確的應用程式資訊清單。

測試詳細資料
檢查應用程式資訊清單,確認內容是正確的,如應用程式套件需求中所述。 這個測試會完成下列檢查︰

  • 副檔名與通訊協定
    應用程式可能會宣告可與其相關聯的檔案類型。 大量不常見檔案類型的宣告,會產生較差的使用者體驗。 這個測試會限制應用程式可以產生關聯的副檔名數目。
  • 架構相依性規則
    這個測試會強制要求應用程式需要宣告與 UWP 的適當相依性。 如果有不適當的相依性,這個測試就會失敗。 如果應用程式設為目標的作業系統版本與建立架構相依性的作業系統版本不符,測試將會失敗。 如果應用程式參照任何「預覽」版本的架構 DLL,測試也會失敗。
  • 處理程序間通訊 (IPC) 驗證
    這個測試強制要求傳統型橋接器應用程式不會在應用程式容器外部與傳統型元件通訊。 處理程序間通訊僅適用於側載應用程式。 將 ActivatableClassAttribute \(部分機器翻譯\) 的名稱指定為 DesktopApplicationPath 的應用程式將無法通過這個測試。

修正動作
按照應用程式套件需求中所述的需求來檢閱應用程式的資訊清單。

3.2 應用程式計數

此測試會確認一個應用程式套件 (.appx、應用程式套件組合) 包含一個應用程式。

背景
此測試是根據「市集原則」而實作。

測試詳細資料
此測試會確認套件組合中的 .appx 套件總數小於 512,而且套件組合中只有一個「主要」套件。 它也會確認套件組合版本的版本號碼設定為 0。

修正動作
請確定應用程式套件和套件組合符合測試詳細資料中所述的需求。

3.3 登錄檢查

背景
此測試會檢查應用程式安裝或更新任何新的服務或驅動程式。

測試詳細資料
此測試會查看 registry.dat 檔案中是否有特定登錄位置的更新,指出將登錄新的服務或驅動程式。 如果應用程式嘗試安裝驅動程式或服務,測試會失敗。

修正動作
檢閱失敗,並移除有問題且不需要的服務或驅動程式。 如果應用程式與其相依,則您想要上架到市集時,需要修正應用程式。

4.平台適用檔案測試

視使用者的處理器架構而定,安裝混合二進位檔案的應用程式可能會損毀或無法正確執行。

背景
此測試會掃描應用程式套件中的二進位檔案是否會發生架構衝突。 應用程式套件不應包含無法在資訊清單中所指定的處理器架構上使用的二進位檔案。 包含不支援的二進位檔案會導致應用程式毀損,或是增加多餘的應用程式封裝大小。

測試詳細資料
驗證每個檔案的可攜式執行檔標頭中的「位元」都適合與應用程式套件處理器架構宣告交叉參考。

修正動作
遵循這些指導方針,以確保您的應用程式套件只包含應用程式資訊清單中指定之架構所支援的檔案:

  • 如果應用程式的目標處理器架構是 Neutral 處理器類型,則應用程式套件不得包含 x86、x64 或 Arm 二進位檔案或映像類型檔案。
  • 如果應用程式的目標處理器架構是 x86 處理器類型,則應用程式封裝必須只能包含 x86 二進位檔案或映像類型檔案。 如果封裝包含 x64 或 ARM 二進位檔案或映像類型檔案,這個測試將會失敗。
  • 如果應用程式的目標處理器架構是 x64 處理器類型,則應用程式封裝必須能包含 x64 二進位檔案或映像類型檔案。 請注意,在這個情況下,套件也可以包含 x86 檔案,但是主要的應用程式經驗應該運用 x64 二進位檔案。 如果套件包含 Arm 二進位檔案或映像類型檔案,或者僅包含 x86 二進位檔案或映像類型檔案,則這個測試將會失敗。
  • 如果應用程式的目標處理器架構是 ARM 處理器類型,則應用程式套件必須只能包含 ARM 二進位檔案或映像類型檔案。 如果套件包含 x64 或 x86 二進位檔案或映像類型檔案,這個測試將會失敗。

5.支援的 API 測試

檢查應用程式是否使用不符合規範的 API。

背景
傳統型橋接器應用程式可以使用某些舊版的 Win32 API 與現代化 API (UWP 元件)。 此測試會識別可使用不受支援之 API 的受控二進位檔案。

測試詳細資料
此測試會檢查應用程式中的所有 UWP 元件︰

  • 檢查二進位檔案的匯入位址表,確認應用程式套件內的每個受控二進位檔案都相依於 UWP 應用程式開發所支援的 Win32 API。
  • 確認應用程式套件內的每個 Managed 二進位檔案不會相依於核准的設定檔外部的函式。

修正動作
確保應用程式已編譯為發行組建,而非偵錯組建,即可進行修正。

注意

應用程式的偵錯組建即使僅使用適用於 UWP 應用程式的 API,還是無法通過這個測試。 檢閱錯誤訊息,找出 API 有哪些不屬於 UWP 應用程式的 API。

注意

即使偵錯組態只使用來自適用於 UWP 應用程式之 Windows SDK 的 API,該設定內建的 C++ 應用程式也無法通過這個測試。 如需詳細資訊,請參閱 UWP 應用程式中 Windows API 的替代方法 \(部分機器翻譯\)。

6.使用者帳戶控制 (UAC) 測試

背景
確保應用程式不會在執行階段要求使用者帳戶控制。

測試詳細資料
應用程式無法根據 Microsoft Store 原則來要求系統管理員權限提高或 UIAccess。 不支援安全性權限提高。

修正動作
必須以互動式使用者身分執行應用程式。 如需詳細資料,請參閱 UI 自動化安全性概觀 \(部分機器翻譯\)。

7.Windows 執行階段中繼資料驗證

背景
確保應用程式隨附的元件符合 UWP 類型系統。

測試詳細資料
此測試會擲回數個與正確類型用法相關的旗標。

修正動作

  • ExclusiveTo 屬性
    確保 UWP 類別不會實作已標示為 ExclusiveTo 其他類別的介面
  • 一般中繼資料正確性
    確保您用來產生類型的編譯器符合最新的 UWP 規格。
  • 屬性
    確保 UWP 類別中的所有屬性都有 get 方法 (set 是選擇性方法)。 針對所有屬性,確定 get 方法所傳回的類型符合 set 方法輸入參數的類型。
  • 類型位置
    確定所有 UWP 類型的中繼資料都位於應用程式套件中命名空間相符名稱最長的 .winmd 檔案中。
  • 類型名稱區分大小寫
    確定應用程式套件中的所有 UWP 類型都有唯一且不區分大小寫的名稱。 同時也確保應用程式套件內的命名空間名稱均未使用 UWP 類型名稱。
  • 類型名稱正確性
    確保全域命名空間或 Windows 最上層命名空間中,不存在任何 UWP 類型。

8.Windows 安全性功能測試

變更預設的 Windows 安全性保護會讓客戶面臨較高的風險。

8.1 禁止的檔案分析器

背景
特定的檔案已更新成具有重要安全性、可靠性或其他改良功能。 Windows 傳統型橋接器應用程式必須包含這些檔案的最新版本,因為舊版本有其風險。 Windows 應用程式認證套件會封鎖這些檔案,確保所有應用程式都使用目前的版本。

測試詳細資料
Windows 應用程式認證套件中的「禁止的檔案檢查」目前會檢查下列檔案︰

  • Bing.Maps.JavaScript\js\veapicore.js
    如果應用程式要使用檔案的「發行預覽」版本,而非最新正式發行,則此檢查通常會失敗。

修正動作
若要修正這個問題,請使用適用於 UWP 應用程式之 Bing Maps SDK 的最新版本。

8.2 私用程式碼簽署

測試私用程式碼簽署二進位檔是否存在於應用程式套件。

背景
私用程式碼簽署檔案應該保持私用,因為若遭到洩露,可能會被用於惡意用途。

測試詳細資料
檢查應用程式套件內的檔案是否有 .pfx 或 .snk 副檔名,以指出已包含私用簽署金鑰。

修正動作
從套件中移除任何私用程式碼簽署金鑰 (例如,.pfx 與 .snk 檔案)。