このページの本文へ

Windows Info 第372回

Windowsにおけるアプリ実行エイリアスとは?

2023年03月26日 10時00分更新

文● 塩田紳二 編集● ASCII

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

Windowsにおける「アプリ実行エイリアス」とは
UWPアプリなどを実行ファイル名で起動するための仕組み

 Windowsには、「アプリ実行エイリアス」という機能がある。これは、exe形式実行ファイルではないUWPアプリなどを、実行ファイル名で起動するための仕組みだ。UWPは特殊な方法で起動されるため、通常のexe実行ファイルのようにファイル名を指定して起動することができない。

 このアプリ実行エイリアスは、Microsoftストアで配布するためにMSIXを使ってパッケージ化されたWin32アプリ(デスクトップアプリ)の起動にも使われる。こちらは、実行ファイル名を使って起動は可能だが、パッケージのインストール先が、システムディレクトリ(C:\Program Files\WindowsApps)以下になり、ディレクトリのスキャンができない。

 さらにアップデートでパッケージ名が変わるなどの問題があり、直接実行ファイルパスを使わないようにアプリ実行エイリアスを使ってスタートメニューなどに登録される。なお、通常のexe形式実行ファイルの起動に関してはこの連載で以前扱った(「Windowsでプログラムを実行するルールをあらためて掘り下げる」「Windowsにおけるプログラム実行ルールをさらに詳しく掘り下げる」)。

 UWPには、URI起動もあるが、アプリ実行エイリアスは、コマンドラインになるため、引数の指定が可能になるというメリットがある。

 アプリ実行エイリアスは、アプリケーションがインストール時に設定するもので、ユーザー固有のものになる。現在利用できるアプリ実行エイリアスは、「設定」→「アプリ」→「アプリの詳細設定」→「アプリ実行エイリアス」で見ることができる。

アプリ実行エイリアスは、「設定」→「アプリ」→「アプリの詳細設定」→「アプリ実行エイリアス」で表示できる。これは、ユーザーがMicrosoftストアからインストールしたアプリが登録するものだ

 Windows 11標準のTerminalや新メディアプレーヤー、ペイント、wsl.exe、メモ帳、Teamsなどが、アプリ実行エイリアスで起動されている。また、wingetもアプリ実行エイリアスだ。

 各ユーザーのアプリ実行エイリアスは、ユーザーフォルダの下にある「%LOCALAPPDATA%\Microsoft\WindowsApps」フォルダの下に登録されている。これは、where.exeを使っても調べることができる。たとえば、ペイント(mspaint.exe)なら、

where.exe mspaint.exe

とすれば、アプリ実行エイリアスの場所を調べられる。

Windows 11標準のペイント(mspaint.exe)もアプリ実行エイリアスで実現されており、where.exeコマンドを使うことで、実行パスとなるユーザーフォルダ下のmapaint.exeのパスを表示できる。これがアプリ実行エイリアスだが、powershellのdirコマンドではリンク先を表示することができない

 なお、PowerShellで「where」は、Where-Objectのエイリアスなので「where.exe」と表記する必要がある。また、where.exeは、アプリ起動エイリアスのプログラムに対して、2つのファイルパスを表示することがある。このうち1つがユーザーフォルダ以下のアプリ実行エイリアスのパスで、もう1つはそのリンク先となるパスのようである。2つを表示する条件がはっきりしないが、PowerShellなどのセッションごとに異なるため、キャッシュなどの問題ではないかと思われる。

アプリ実行エイリアスは
NTFSの再解析ポイントと呼ばれる機能で実現されている

 このアプリ実行エイリアスは、NTFSの再解析ポイント(Reparse Point)と呼ばれる機能を使って実現されている。再解析ポイントとは、NTFSのファイルシステムオブジェクトの一種で、ファイル情報内に記録されたタグとデータを使って、ファイルシステム・フィルタードライバーがこれを解釈してさまざまな機能を実現している。たとえば、シンボリックリンクやディレクトリジャンクション、OneDriveの同期ファイルなどがこれを使う。

 再解析ポイントは、すべてのファイルに存在しているわけではなく、また「拡張属性」とは同じ場所を記録に使うために排他的な関係にある。ファイルやディレクトリが再解析ポイントを持っている場合、fsutil.exeでこれを表示させることができる。「%LOCALAPPDATA%\Microsoft\WindowsApps」フォルダにあるexeファイルに対して、

fsutil.exe reparsepoint query <パス>

とすることで、再解析ポイントデータを表示できる。Windows 11付属のWindows Terminalなら、

として、情報を出力できる。

アプリ実行エイリアスは、NTFSの再解析ポイントを使って実現されている。これは、fsutil.exeを使ってダンプさせることができる。ただし、データ構造などについては未公開になっている

 このコマンドの出力で戦闘にある「再解析タグ値」が再解析ポイントタグで、「タグ値: Microsoft」は、このタグがマイクロソフトが定義したシステム用タグであることを示す。再解析タグ値は、「ポイント タグを再解析する」(https://learn.microsoft.com/ja-jp/windows/win32/fileio/reparse-point-tags)にあるように32bit整数値で、最上位ビットがマイクロソフト定義のタグを示す。このタグは、Windows SDKに含まれているWinNT.hで、定義されている「IO_REPARSE_TAG_APPEXECLINK」である。

 再解析ポイントの情報は、Win32APIでファイルシステムドライバーにIOCTRLコードを送って入手することもできるのだが、プログラムを作るのがかなり面倒だ。そこで、fsutil.exeの出力を加工して取り出すことにした。

 データはUnicode文字列で、区切りは0x0000である。ただし、fsutilの出力は文字列なので、不要な部分を外して、16進ダンプ部分を取り出して加工し、文字列の配列として、バイト配列に変換したのちに文字列化してある。以下は、そのためのコマンドである。

fsutil.exeの出力を見ると、0x0000を区切りとしたユニコード文字列からなっているように見える。そこでPowerShellで16進ダンプ部分をデコードして文字列化してみた。すると4行目のデータがどうも実行ファイルのパスを示しているようだ

"$env:LOCALAPPDATA\Microsoft\WindowsApps\wt.exe"|%{[System.Text.Encoding]::Unicode.GetString(((fsutil.exe reparsepoint query $_ | select -Skip 5 | %{ $_.Substring(7,50) -replace " "," " } ) -join '' -replace " 00 00 00"," 00 0a 00" -split ' ' -ne '' | %{ [int]::Parse($_,"HexNumber") } )) -split "`n"}

 これはfsutil.exeの出力形式に依存しているため、表示方法が変わると対応できなくなる可能性があり、アプリ実行エイリアスの再解析ポイントのデータ構造も変わってしまう可能性がある。今後のWindowsのアップデート後には、使えない可能性もある点は了承いただきたい。

 なお、先頭の文字列にあるexeファイル名を変更することで他のプログラムの再解析ポイントデータも出力させることができる。フォルダのファイルすべてを調べるなら、「wt.exe」を「*.exe」として、行頭に「Get-ChildItem -Recurse -Path」を付ける。

 これを使うと、Windows 11付属のTerminal(プレビュー版でない)は、以下のフォルダーに実行ファイルが存在することがわかる(原稿執筆時点の安定版v1.16.1026の場合)。

C:\Program Files\WindowsApps\Microsoft.WindowsTerminal_1.16.10262.0_x64__8wekyb3d8bbwe\wt.exe

 「C:\Program Files\WindowsApps」は、システムディレクトリなので、コマンドラインのdirコマンドやエクスプローラーで直接開くことはできないが、その下にあるパッケージフォルダを指定すれば開くことが可能だ。

 アプリ実行エイリアスをスクリプトなどから利用する場合には、ユーザーフォルダー下の「%LOCALAPPDATA%\Microsoft\WindowsApps」にあるexeファイルのパスを指定するか、前記のコマンドで得られたexeファイルのパスを指定する必要がある。

 ただし後者を使うと、設定のアプリ実行エイリアスでの指定は無視される。また、アップデートなどでパッケージ名が変わり、パスが無効になる。これは、パッケージ名にバージョン番号が含まれるからだ。Microsoftストアからインストールしたアプリケーションに関しては自動的にアップデートされ、ユーザーがそれを禁止することはできない。なので、パッケージのインストールパスを使った起動は、スクリプトなどに入れても無効になってしまう。これを追いかけるなら、再解析ポイントを解析して実行先を調べるしかない。

 アプリ実行エイリアスは、コマンドラインなどで利用可能なものの、PATH変数の指定も不要勝手にWindowsが起動する。アプリ実行エイリアスは、再解析ポイントなので「どのプログラム」が動いているのかがユーザーには見えにくい。Microsoftストア経由なので一応のセキュリティはあるが、何が実行されるのかわからないと不安になる。今回解説した方法を使えば、どこにあるプログラムが起動するのかが明確になり、少しは安心できるはずだ。

カテゴリートップへ

この連載の記事

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,890
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,880
3
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 ホワイト
¥740
4
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
¥990
5
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
¥1,100
6
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ブラック T-K6A-2630BK
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ブラック T-K6A-2630BK
¥2,111
7
【Amazon.co.jp限定】バッファロー microSD 128GB 100MB/s UHS-1 U1 microSDXC【 Nintendo Switch 対応 】V10 A1 IPX7 Full HD RMSD-128U11HA/N
【Amazon.co.jp限定】バッファロー microSD 128GB 100MB/s UHS-1 U1 microSDXC【 Nintendo Switch 対応 】V10 A1 IPX7 Full HD RMSD-128U11HA/N
¥3,080
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
¥4,918
9
CIO フラットスパイラルケーブル CtoC 1m (Type-C/USB-C) PD 急速充電 平型 磁石 マグネット吸着 まとまる 充電ケーブル PD 240W データ転送 480Mbps (ライトブラック, 1m)
CIO フラットスパイラルケーブル CtoC 1m (Type-C/USB-C) PD 急速充電 平型 磁石 マグネット吸着 まとまる 充電ケーブル PD 240W データ転送 480Mbps (ライトブラック, 1m)
¥1,980
10
エルパ(ELPA) 扉付タップラン 電源タップ 延長コード 125V 3m 3個口 ホワイト WBT-N3030B(W)
エルパ(ELPA) 扉付タップラン 電源タップ 延長コード 125V 3m 3個口 ホワイト WBT-N3030B(W)
¥652

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

デジタル用語辞典

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