Windows 10に標準搭載のUWPアプリの中身を掘り下げる

Windows 10に標準搭載のUWPアプリの中身を掘り下げる

  • ASCII.jp
  • 更新日:2019/08/25

前回は、UWPアプリのパッケージである、Appxに関する基礎的な情報を得る方法を紹介したが、今回は具体的にUWPアプリについて調べていくことにしよう。

取り上げるのは「メッセージング」アプリとするが、もちろん、各自の好みで調べていただいて構わない。また、今後のバージョンアップなどで、インストール先フォルダー名などが変わる可能性もある。できるだけバージョンには依存しないように記述しているが、パスを含むコマンドは変更に対応する必要がある。

まずは、インストール先を調べる。Powershell(管理者)で以下のコマンドを実行してみる

(get-appxpackage "*messaging*").installlocation

とすると、インストール先は、

C:\Program Files\WindowsApps\Microsoft.Messaging_4.1901.10241.1000_x64__8wekyb3d8bbwe

であることがわかる。しかし、実際にインストール先フォルダーを調べると名前のよく似た複数のフォルダーがある。

No image

メッセージング(Microsoft.Messaging)のインストール場所を表示させる。しかし、そこには似たような名前のフォルダーが複数ある

インストール先フォルダーとは、途中部分が違うのみで、先頭と最後の部分が同じだ。これらは、分離されたリソースのフォルダーだ。このうち、「language-ja」という文字列が名前一部にあるフォルダーが日本語関係のリソースを含むフォルダーで、アプリケーションの日本語名はここにある。

アプリケーションの中では、自分自身の日本語表示名は自分のリソースなので簡単に得られ、スタートメニューにタイルを登録したときに表示される日本語名も、アプリ自身がWindowsに通知して表示させている。ときどき「ms-resource:……」という名前のアプリを見かけるが、これは、名前の取り出しに失敗してリソースを指定するURIが表示されているものだ。この場合、UWPアプリが正しく動作できない状態にある。アプリをリセットするか、再インストールすることで、正しく名前を表示できるようになる。

日本語リソースを取り出す

さて、この日本語リソースフォルダーを調べてみよう。

No image

「resources.pri」にリソースが入っている。しかし、これはバイナリファイルなのでWindows SDK付属のMakePri.exeでこれをxmlファイル化する

フォルダー内には、4つのファイルがあるが、リソースは、「resources.pri」というファイルに格納されいる。これは、文字列などのリソースをバイナリ化したpri形式なのでこのままでは読めない。幸い、Windows SDKに付属のMakepri.exeというコマンドでpri形式をxml形式に変換することができる。

ただし、そのためには、UWPアプリのインストール先フォルダーにあるresource.priファイルも必要になる(蛇足ながらWindows SDKのインストールも必要である)。具体的には、以下のコマンドで、xml化したリソースが得られる。

makepri.exe dump /if リソースフォルダ\resources.pri /es インストール先\resources.pri /of 出力パス

メッセージングの場合、以下の長いコマンドを使う。

makepri.exe dump /if .\Microsoft.Messaging_4.1901.10241.1000_neutral_split.language-ja_8wekyb3d8bbwe\resources.pri /es .\Microsoft.Messaging_4.1901.10241.1000_x64__8wekyb3d8bbwe\resources.pri /of c:\temp\Microsoft.Messaging.xml

これで、c:\tempにMicrosoft.Messaging.xmlというファイルができる。このあと、ほかのUWPアプリについても調べたいので、このさい、日本語リソースが取り出せるものは、全部取り出してXMLファイルにしておこう。そのためには、C:\temp\appxpriなどのxmlを保存先フォルダーを予め作成しておき、以下のコマンドをPowershell(要管理者権限)で実行する。

Get-AppxPackage -PackageTypeFilter main foreach { makepri.exe dump /es (Get-ChildItem "$($_.packageFullName)\resources.pri") /if (Get-ChildItem "$($_.name)*-ja*\resources.pri") /of "c:\temp\$($_.name).xml" }

なんのことはない、get-AppxPackageで出力されるAppxパッケージオブジェクトの名前から日本語リソースフォルダーとインストール先フォルダー名を作り、そこにあるresources.priに対して、makepri.exeを実行しているだけだ。

中には日本語リソースフォルダーのないアプリもあるので、途中エラーのようなメッセージが出るが、makepri.exeがエラーでヘルプメッセージを出力しているだけなので問題ない。なお、C:\Program Files\WindowsApps\は、書き込み禁止なので、xmlファイルの保存先(/of)は、必ず書き込み可能なフォルダーを指定しておくこと。

リソースXMLファイルを見てみる

では、早速メッセージングのxmlファイルを見てみよう。直接開くとIEがxml形式として表示してくれる。ここにアプリの名前らしきものがある。

<NamedResource name="AppListName" uri="ms-resource://Microsoft.Messaging/Resources/AppListName">
<Candidate type="String" qualifiers="Language-JA-JP">
<Value>メッセージング</Value>
</Candidate>
</NamedResource>
<NamedResource name="AppStoreDescription" uri="ms-resource://Microsoft.Messaging/Resources/AppStoreDescription">
<Candidate type="String" qualifiers="Language-JA-JP">
<Value>メッセージング</Value>
</Candidate>
</NamedResource>
<NamedResource name="AppStoreName" uri="ms-resource://Microsoft.Messaging/Resources/AppStoreName">
<Candidate type="String" qualifiers="Language-JA-JP">
<Value>Microsoft メッセージング</Value>
</Candidate>
</NamedResource>

しかし、複数あり、どれも名前のようではある。さて、本当の名前はどれか? これを判定するには、実は、アプリのインストール先にあるAppxManifest.xmlファイルを調べる必要がある。AppxManifest.xml内に「uap:VisualElements」というタグがあり、そのDisplayName属性にリソースのURIが記述されている。メッセージングの場合、

<uap:VisualElements DisplayName="ms-resource:AppListName" ……

となっていて、AppListNameというリソースが表示名に使われる。

No image

メッセージングのインストール先フォルダーにあるAppxManifest.xmlにあるタグが表示する名前のリソースURIを指定している。この場合は、リソースXMLファイルから「AppListName」というリソースを探せばよい

上記リストの「NamedResource」タグのうち、一致するuri属性値(AppListName)を持つ「メッセージング」が表示に使われる名前である。ただし、この関係は、一定ではなく、AppxManifest.xmlではさまざまなリソース指定URIが使われており、アプリ1つ1つのAppxManifest.xmlでこれを調べて、リソース側XMLを捜す必要がある。これは、かなり面倒なので、できれば自動化したい。そこで、次回は、xmlをPowerShellで処理させて、日本語の表示名を取り出す方法を解説する。

この記事をお届けした
グノシーの最新ニュース情報を、

でも最新ニュース情報をお届けしています。

外部リンク

IT総合カテゴリの人気記事

グノシーで話題の記事を読もう!
Oracle OpenWorld 2019開幕 - エリソン氏が数多くの新製品を発表
無料で容量無制限!iPhoneでもGoogleフォトで写真のバックアップが取れるって知ってた?
難解なITシステムの使い方を“画面上でガイド”する「テックタッチ」が1.2億円調達
スマホの決済サービスが増えすぎてわからな~い!がひと目でわかるカオスマップ登場
超ハードコア陸海空網羅戦略ストラテジー続編『Command: Modern Operations』発表
  • このエントリーをはてなブックマークに追加