このページの本文へ

前へ 1 2 次へ

Windows Info 第187回

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

2019年08月25日 11時59分更新

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

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

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

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

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

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

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

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

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

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

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

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

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

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

「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)は、必ず書き込み可能なフォルダーを指定しておくこと。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

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