このページの本文へ

前へ 1 2 次へ

Windows Info 第189回

Windows 10のUWPアプリのファイルから情報を取り出す

2019年09月08日 10時00分更新

文● 塩田紳二 編集● ASCII編集部

  • この記事をはてなブックマークに追加
  • 本文印刷

 今回は、UWPアプリの基本情報を保持するAppxManifest.xmlを解析して、一連のUWP解析の最後としたい。さて、このAppxManifest.xmlだが、Appx自体、Windows 8のストアアプリ用に作られたものであるため、このxmlファイルもストアアプリの時代から存在しており、そのため、複雑な仕様を持つ。その仕様については、Microsoftのサイトに仕様書がある。

●Package manifest schema reference for Windows 10
 https://docs.microsoft.com/ja-jp/uwp/schemas/appxpackage/uapmanifestschema/schema-root

 それによれば、アプリの名前は<DisplayName>タグにあることになっているのだが、これとは別にタイル用の定義が<uap:VisualElements>にある。このAppxManifest.xmlを扱うときに注意するのは、XMLネームスペース(XML Namespace、xmlns)が使われていることだ。

 <uap:VisualElements>の先頭の「uap:」という部分がXMLネームスペースで、簡単にいうと、タグに複数の定義があるときに、ネームスペースを付けることでそれぞれを区別するためのものだ。前回のようにselectNodes()とXPathを使う方法は、ネームスペースがあるとアクセスが面倒になる。

 具体的には、ネームスペースをXMLNamespaceManagerというオブジェクトに設定して、これをXPathと併用してSelectNodes()を使う必要がある。XPathが使えると「なんでもいいから属性DisplayNameを持ってるタグ」といった指定が使えて簡単で、かつ、XMLファイルの構造変化にも対応しやすいのだが、今回は、それ以外の方法を使う。

まずは、実際にどうなっているのか調べる

 xmlファイルとはいえテキストファイルなので、単に行を取り出す程度の調査は比較的簡単できる。UWPアプリがインストールされている「C:\Program Files\WindowsApps\」を管理者権限で起動したPowershellで開く。以下のコマンドで、そこにインストールされているアプリのAppxManifest.xmlファイルからすべての<VisualElements>タグを表示させることができる。select-stringでは検索パターンに正規表現が使える。

Select-String ".\*_x64_*\AppxManifest.xml" -Pattern '\<.*VisualElements.*DisplayName=' | Out-GridView

 前述の仕様書上は、<uap:VisualElements>というタグになっているが、ネームスペースがないもの、あっても、“uap:”以外のものがある。

out-gridviewを使うとコマンドからの大量の出力を別ウィンドウにすることができる。また、Gridviewでは、条件を設定して、表示する行を絞り込むことも可能だ。写真右下の3つ目のウィンドウで先頭にuapがないVisualElementsタグのみを表示させた。このうちの1つはマイクロソフト製のXbox One SmartGlassアプリである

 サードパーティのアプリならば、まあ、よしとしようが、ネームスペースがないアプリの1つは、こともあろうかマイクロソフト製である。

DisplayNameタグを取り出す

 まずは、簡単な方法として<DisplayName>タグを表示させる。まずは、appxmainfest.xmlを変数に読み込む部分だが、こちらは、専用のコマンドGet-AppxPackageManifestがある。変数$Manifestに読み込むとしたら、

$Manifest = Get-AppxPackage "*Messaging*" | Get-AppxPackageManifest

とする。「*Messaging*」は、パッケージ名の一部を表す文字列だ。正確にパッケージ名を指定してもいいのだが、Get-AppxPackageの場合には、このようにワイルドカードを含んだ指定が可能。これに対して、Get-AppxPackageManifestは、正確にパッケージ名を指定する必要があるため、Get-AppxPackageコマンドが出力するオブジェクトをパイプで渡している。

 これはXMLオブジェクトとして出力されるので、キャストは不要である。こうしてXMLファイルを$Manifest変数に読み込ませれば、前回解説したように、タグ名をピリオドでつないでいけば、タグの値を得ることができる。前述の<DisplayName>タグなら、

$Manifest.Package.Properties.DisplayName

とすればよい。

前回解説したように、Powershellでは、変数にXMLを読み込んでXMLオブジェクトとして認識させれば、タグ名をプロパティのようにピリオドで区切ってアクセスできるようになる

 この方法は簡単で、PowerShellがXMLオブジェクトと認識している状態では、タブキーによるタグ名の補完なども使えるのだが、階層構造に依存する記述方法になる。このXMLをPowershellのオブジェクトとして扱う方法では、階層構造が変わると、アクセスができず、かといってエラーにもならず、何もないことを示すNULLを返す。このため、スクリプトなどで処理しようとすると、エラーにならないけど、答えも出ないといったものになってしまい、結構デバッグが面倒な状態になる。

 仕様書を見る限り、この構造は変わらないようなので、正しく作られたAppxManifestであれば、これでアクセスができる、はずであるが、前述のようにルールに従っていないタグが使われているようなので、注意は必要だ。

●AppxManifest.xml DisplayNameタグ
 https://docs.microsoft.com/ja-jp/uwp/schemas/appxpackage/uapmanifestschema/element-displayname

 実際に<DisplayName>タグではどういう定義がされているのかを調べてみよう。Get-AppxPackageでインストールされているアプリを列挙し、Get-AppxPackageManifestで得たXMLオブジェクトに対して直接<DisplayName>タグを表示させてみる。

(Get-AppxPackage -PackageTypeFilter Main | Get-AppxPackageManifest).Package.Properties.DisplayName | Out-GridView

 このコマンドの出力結果が、以下の画面だ。

インストールされている通常UWPアプリのDisplayNameタグを表示させてみた。ms-resource:で始まるものは、情報がリソースファイル側にあることを示す。そうでないものは、直接名前が指定されている

 これを見ると、大半は各国語にローカライズするために「ms-resource:」で始まるリソース指定になっているが、中には、英語名しか指定していないものや、直接日本語で名前が指定されているものもある。

 特定のUWPアプリのAppxManifest.xmlが変数$Manifestに読み込まれているなら、

$Manifest.Package.Properties.DisplayName

とすることで、<DisplayName>タグの値を取り出すことが可能だ。

前へ 1 2 次へ

カテゴリートップへ

本記事はアフィリエイトプログラムによる収益を得ている場合があります

この連載の記事

ASCII倶楽部

注目ニュース

  • 角川アスキー総合研究所

プレミアム実機レビュー

ピックアップ
1
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
¥1,290
2
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
¥2,249
3
【Amazon.co.jp限定】Meta Quest 3S(128GB)購入で『Gorilla Tag』ゲームを無料プレゼント|VRヘッドセット|メモリが33%増加 | 2倍のグラフィック処理性能 |ワイヤレスのVR体験
【Amazon.co.jp限定】Meta Quest 3S(128GB)購入で『Gorilla Tag』ゲームを無料プレゼント|VRヘッドセット|メモリが33%増加 | 2倍のグラフィック処理性能 |ワイヤレスのVR体験
¥50,490
4
CIO フラットスパイラルケーブル CtoC (Type-C/USB-C) PD 急速充電 平型 磁石 マグネット吸着 まとまる 充電ケーブル PD 240W データ転送 480Mbps 形状記憶 iPhone 17 / 16 / 15 Macbook Pro/Air/iPad用/ノートパソコン Galaxy Google Pixel Android (ライトブラック, 1.5m)
CIO フラットスパイラルケーブル CtoC (Type-C/USB-C) PD 急速充電 平型 磁石 マグネット吸着 まとまる 充電ケーブル PD 240W データ転送 480Mbps 形状記憶 iPhone 17 / 16 / 15 Macbook Pro/Air/iPad用/ノートパソコン Galaxy Google Pixel Android (ライトブラック, 1.5m)
¥1,980
5
ソニー ゲーミングイヤホン INZONE Buds:WF-G700N Fnatic監修/ワイヤレス / 低遅延2.4GHzワイヤレス接続 USBType-Cトランシーバー同梱/LE Audio対応/アクティブノイズキャンセリング/立体音響 / 最大約24時間バッテリー / 急速充電/マイク付き / PS5 スマホ PC Switch グラスパープル
ソニー ゲーミングイヤホン INZONE Buds:WF-G700N Fnatic監修/ワイヤレス / 低遅延2.4GHzワイヤレス接続 USBType-Cトランシーバー同梱/LE Audio対応/アクティブノイズキャンセリング/立体音響 / 最大約24時間バッテリー / 急速充電/マイク付き / PS5 スマホ PC Switch グラスパープル
¥20,800
6
【Amazon.co.jp限定】 ロジクール 静音 ワイヤレス トラックボール マウス M575SPd Bluetooth Logibolt 無線 windows mac iPad OS Chrome トラックボールマウス ブラック M575 M575SP 国内正規品 ※Amazon.co.jp限定 壁紙ダウンロード付き
【Amazon.co.jp限定】 ロジクール 静音 ワイヤレス トラックボール マウス M575SPd Bluetooth Logibolt 無線 windows mac iPad OS Chrome トラックボールマウス ブラック M575 M575SP 国内正規品 ※Amazon.co.jp限定 壁紙ダウンロード付き
¥5,270
7
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
¥640
8
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ブラック T-K6A-2630BK
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ブラック T-K6A-2630BK
¥1,590
9
Amazon Kindle Paperwhite (16GB) 7インチディスプレイ、色調調節ライト、12週間持続バッテリー、広告なし、ブラック
Amazon Kindle Paperwhite (16GB) 7インチディスプレイ、色調調節ライト、12週間持続バッテリー、広告なし、ブラック
¥18,980
10
Anker Nano Charger (70W, 3 Ports) ブラック【 PD対応/PSE技術基準適合/折りたたみ式プラグ】iPhone 17 / 16 / 15シリーズ / Air MacBook Windows PC iPad Galaxy Android スマートフォン ノートPC 各種 その他機器対応
Anker Nano Charger (70W, 3 Ports) ブラック【 PD対応/PSE技術基準適合/折りたたみ式プラグ】iPhone 17 / 16 / 15シリーズ / Air MacBook Windows PC iPad Galaxy Android スマートフォン ノートPC 各種 その他機器対応
¥3,490

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

デジタル用語辞典

ASCII.jpメール デジタルMac/iPodマガジン