Windows アプリ認定キット (Windows App Certification Kit : WACK)

導入

Windows SDKがインストールされているならば、C:\Program Files (x86)\Windows Kits\10\App Certification Kit\appcertui.exeから起動できます。コマンドライン版ならばappcert.exeです。

検査

インストール前のアプリで検査対象とできるのは、アプリ パッケージ (.msixまたは.appx) かアプリ バンドル (.msixbundleまたは.appxbundle) ファイルです。

検査の項目

  • Windows セキュリティ機能のテスト
    • プライベート コード署名
    • 禁止されたファイルのアナライザー
  • Windows ランタイム メタデータの検証
    • ExclusiveTo 属性
    • プロパティ
    • 一般的なメタデータ正確性
    • 型のロケーション
    • 型名の正確性
    • 型名の大文字小文字の区別
  • アプリ マニフェスト リソースのテスト
    • アプリ リソース
    • ブランド化
  • アプリ機能テスト
  • デジタル署名されたファイルのテスト
  • デバッグ構成のテスト
  • パッケージのサニティ テスト
    • アーカイブ ファイルの使用量
    • プラットフォームに適したファイル
    • ブロック済みの実行可能ファイル
  • パッケージの準拠のテスト
    • アプリ マニフェスト
    • アプリケーション数
    • エンタープライズ機能
    • ファイル関連付けの動詞
    • リソース パッケージ
    • レジストリ チェック
  • ユーザー アカウント制御 (UAC) のテスト
  • 高 DPI サポート

結果

レポートの名前を尋ねられたときには、その保存先を記憶しておきます。そこが%LOCALAPPDATA%/Microsoft/AppCertKit/でなければ[結果を表示するにはここをクリックしてください]によるレポートの表示に失敗するため、ファイルを自身で指定して開く必要があります。Windows App Cert Kit (WACK) Log Folder? - Stack Overflow

結果はXMLで出力されます。その中で<RESULT><![CDATA[FAIL]]></RESULT><RESULT><![CDATA[WARNING]]></RESULT>と出力されるのが、修正すべき項目です。

結果の項目

REQUIREMENT NAME DESCRIPTION OPTIONAL
デジタル署名されたファイルのテスト 署名されたドライバーおよび実行可能ファイルのインストール 署名されたドライバーおよび実行可能ファイルをインストールします。 TRUE
ユーザー アカウント制御 (UAC) のテスト ユーザー アカウント制御の実行レベル Windows® アプリケーションでは、マニフェスト (埋め込みまたは外部) を用意して実行レベルを定義し、アプリケーションの実行に必要な権限を OS に通知できるようにする必要があります。 TRUE
パッケージの準拠のテスト アプリケーション数 1 つのパッケージで、マニフェスト内に複数のアプリを定義することはできません。 TRUE
アプリ マニフェスト アプリ マニフェストには、すべての必須フィールドに有効なエントリを含める必要があります。 FALSE
ファイル関連付けの動詞 登録されているファイル関連付けの動詞がインストールされていないことを確認する、レジストリの検証。 TRUE
レジストリ チェック ドライバーがインストールされていないこと、および NT サービスがインストールされていないことを確認する、レジストリの検証。 TRUE
エンタープライズ機能 パッケージにエンタープライズ専用の機能が含まれているかどうかを確認してください。 FALSE
リソース パッケージ リソース パッケージに PE ファイルが含まれているかどうか確認してください。 FALSE
Windows セキュリティ機能のテスト 禁止されたファイルのアナライザー 安全でない既知のファイルを検出するアプリケーションの分析 FALSE
プライベート コード署名 アプリで、プライベート コード署名キー ファイルをパッケージしないでください。 FALSE
アプリ マニフェスト リソースのテスト アプリ リソース パッケージには resources.pri ファイル内で定義された有効なリソースを含める必要があります。 TRUE
ブランド化 アプリで、Windows SDK サンプルまたは Visual Studio によってパックされた既定のイメージを使用しないでください。 FALSE
デバッグ構成のテスト デバッグの構成 アプリによるデバッグ バイナリのインストールは禁止されています。 TRUE
アプリ機能テスト 特殊用途の機能 特殊用途の機能を宣言するパッケージでは、オンボード プロセス時に理由を指定する必要があります。 FALSE
Windows ランタイム メタデータの検証 ExclusiveTo 属性 クラスは、別のクラスに対して ExclusiveTo とマークされたインターフェイスを実装してはなりません。 FALSE
型のロケーション 一致する名前空間が最も長いメタデータ ファイル内に、型が定義されている必要があります。 FALSE
型名の大文字小文字の区別 名前空間および型名は、大文字/小文字の違いだけで異なるものにすることはできません。 FALSE
型名の正確性 システム型に限り、Windows 名前空間に存在できます。グローバル名前空間には、どの型も存在できません。 FALSE
一般的なメタデータ正確性 メタデータ ファイルは、有効かつ正確であるためにさまざまな要件を満たしている必要があります。 TRUE
プロパティ 書き込み専用およびインデクサー プロパティを使用できない可能性があります。対応する getter メソッドと setter メソッドの型が一致している必要があります。 FALSE
パッケージのサニティ テスト アーカイブ ファイルの使用量 パッケージのアーカイブ ファイル内に PE ファイルを含めることはできません。 TRUE
ブロック済みの実行可能ファイル プロセス起動 API とブロックされた実行可能ファイルに対する参照があるかどうかを検出します TRUE
プラットフォームに適したファイル アプリでは、ターゲット プロセッサのアーキテクチャに一致しないファイルをインストールしないようにする必要があります。 TRUE
高 DPI サポート DPIAwarenessValidation さまざまな高 DPI のディスプレイ設定で一貫して適切な UI の表示を実現するためには、アプリケーションを DPI 対応として設定する必要があります。 FALSE

デバッグ構成のテスト (Debug configuration)

バイナリ ***.dll はデバッグ モードでビルドされています。(The binary ***.dll is built in debug mode.)」と報告された.dllを、リリース モードでビルドされたバイナリに差し替えます。

ブロック済みの実行可能ファイル (Blocked executables)

ファイル ***.exe 内に "プロセス起動" に関連した API *** への参照があります (File ***.exe contains a reference to a "Launch Process" related API ***)」と報告されたAPIが起動するファイルが、アプリに関連したものならば無視できます。

ファイル *** 内に "***" へのブロックされた実行可能な参照が含まれています。(File *** contains a blocked executable reference to "***".)」と報告された実行可能な参照が、"cmd"や"reg"などならば無視できます。これはこのテストが、テキストやバイナリ内にコマンドと一致する文字列が存在するかどうかだけで判定しているためです。

How to validate if your application is compliant with the Windows Store polices (Windows 10 and Windows 10 S) | Microsoft Community Hub

高 DPI サポート (High-DPI support)

ファイル *** は、マニフェスト内に PerMonitorV2 のマニフェストが存在せず、DPI 認識 API の呼び出しもありません (例: user32!SetProcessDpiAwarenessContext または user32!SetThreadDpiAwarenessContext)。(File ***.exe neither has PerMonitorV2 manifested in the manifest nor calls into DPI Awareness APIs for ex: user32!SetProcessDpiAwarenessContext or user32!SetThreadDpiAwarenessContext.)」 「アプリ *** は DPI 対応ではありません。(The app *** is not DPI Aware.)高 DPI テスト - Windows アプリ認定キットのテスト - Win32 apps | Microsoft Learn

UWP以外は自動でスケーリングされないため、対応が必要です。Windows FormではDpiChangedイベントに応答し、高DPI対応であることを宣言します。

Microsoft Learnから検索