このページの本文へ

前へ 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 次へ

カテゴリートップへ

この連載の記事
1
【整備済み品】富士通 ノートパソコン LIFEBOOK U9310 13.3型FHD(1920x1080) 超軽薄 ノートPC/第10世代 Core i5-10310U@1.7GHz/ 8GB メモリ/高速ストレージ SSD/Webカメラ/WIFI/Type-C/HDMI/win11&MS Office 2019 搭載 ビジネス 在宅勤務向け パソコン (メモリ:8GB/SSD:256GB)
【整備済み品】富士通 ノートパソコン LIFEBOOK U9310 13.3型FHD(1920x1080) 超軽薄 ノートPC/第10世代 Core i5-10310U@1.7GHz/ 8GB メモリ/高速ストレージ SSD/Webカメラ/WIFI/Type-C/HDMI/win11&MS Office 2019 搭載 ビジネス 在宅勤務向け パソコン (メモリ:8GB/SSD:256GB)
¥39,800
2
【整備済み品】中古 ノートパソコン NEC VersaPro VKT16/15.6型・第8世代Core i5-8250U(最大動作3.4GHz)/快適メモリ8GB/ 高速SSD 256GB/Win11 Pro/MS Office 2019付属/テンキー付, Webカメラ, USB3.0, HDMI, VGA, 有線LAN, WIFI内蔵, Bluetooth/ACアダプター付属/180日間保証
【整備済み品】中古 ノートパソコン NEC VersaPro VKT16/15.6型・第8世代Core i5-8250U(最大動作3.4GHz)/快適メモリ8GB/ 高速SSD 256GB/Win11 Pro/MS Office 2019付属/テンキー付, Webカメラ, USB3.0, HDMI, VGA, 有線LAN, WIFI内蔵, Bluetooth/ACアダプター付属/180日間保証
¥26,880
3
【整備済み品】富士 通 2in1ノートパソコン V727【本体のみ】/第7世代Core M3/12.3型タッチパネル1920×1080/メモリ 8GB/SSD 128GB/Win 11/MS Office 2019/USB 3.1/Type-C/無線WIFI/オーディオ内蔵/WEBカメラ/初期設定済
【整備済み品】富士 通 2in1ノートパソコン V727【本体のみ】/第7世代Core M3/12.3型タッチパネル1920×1080/メモリ 8GB/SSD 128GB/Win 11/MS Office 2019/USB 3.1/Type-C/無線WIFI/オーディオ内蔵/WEBカメラ/初期設定済
¥9,600
4
Lenovo Chromebook クロームブック IdeaPad Flex 3i Gen8 12.2インチ インテル® プロセッサー N100搭載 メモリ4GB eMMC 64GB バッテリー駆動12.0時間 重量1.25kg アビスブルー 82XH001KJP
Lenovo Chromebook クロームブック IdeaPad Flex 3i Gen8 12.2インチ インテル® プロセッサー N100搭載 メモリ4GB eMMC 64GB バッテリー駆動12.0時間 重量1.25kg アビスブルー 82XH001KJP
¥29,800
5
【Amazon.co.jp限定】 ASUS ノートパソコン Vivobook 15 X1502VA 15.6インチ インテル Core i7 13620H メモリ16GB SSD 1TB Windows 11 バッテリー駆動 8.9時間 重量1.7kg PC Game Pass 3ヶ月利用権付き クワイエットブルー X1502VA-I7H161W
【Amazon.co.jp限定】 ASUS ノートパソコン Vivobook 15 X1502VA 15.6インチ インテル Core i7 13620H メモリ16GB SSD 1TB Windows 11 バッテリー駆動 8.9時間 重量1.7kg PC Game Pass 3ヶ月利用権付き クワイエットブルー X1502VA-I7H161W
¥104,800

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

ASCII倶楽部

注目ニュース

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

プレミアム実機レビュー

ピックアップ
1
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
¥1,880
2
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,390
3
【Amazon.co.jp限定】バッファロー microSD 32GB 100MB/s UHS-1 U1 microSDHC【 Nintendo Switch 対応 】V10 A1 IPX7 Full HD RMSD-032U11HA/N
【Amazon.co.jp限定】バッファロー microSD 32GB 100MB/s UHS-1 U1 microSDHC【 Nintendo Switch 対応 】V10 A1 IPX7 Full HD RMSD-032U11HA/N
¥1,880
4
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 ホワイト
¥660
5
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
¥980
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,280
7
バッファロー SDカード 128GB 100MB/s UHS-1 スピードクラス1 VideoSpeedClass10 IPX7 Full HD データ復旧サービス対応 RSDC-128U11HA/N
バッファロー SDカード 128GB 100MB/s UHS-1 スピードクラス1 VideoSpeedClass10 IPX7 Full HD データ復旧サービス対応 RSDC-128U11HA/N
¥2,000
8
キヤノン Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm
キヤノン Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm
¥5,545
9
Amazonベーシック USB-A -ライトニングケーブル ナイロン iPhone充電 Apple MFi認証 iPhone 14/14 Pro/13/13 Pro/12/SE(第2世代)/iPad 各種対応(シルバー 0.9m)
Amazonベーシック USB-A -ライトニングケーブル ナイロン iPhone充電 Apple MFi認証 iPhone 14/14 Pro/13/13 Pro/12/SE(第2世代)/iPad 各種対応(シルバー 0.9m)
¥1,183
10
エルパ(ELPA) 扉付タップラン 電源タップ 延長コード 125V 3m 3個口 ホワイト WBT-N3030B(W)
エルパ(ELPA) 扉付タップラン 電源タップ 延長コード 125V 3m 3個口 ホワイト WBT-N3030B(W)
¥652

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

デジタル用語辞典

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