Windowsにおけるアプリ実行エイリアスとは?
ASCII.jp / 2023年3月26日 10時0分
Windowsにおける「アプリ実行エイリアス」とは UWPアプリなどを実行ファイル名で起動するための仕組み
Windowsには、「アプリ実行エイリアス」という機能がある。これは、exe形式実行ファイルではないUWPアプリなどを、実行ファイル名で起動するための仕組みだ。UWPは特殊な方法で起動されるため、通常のexe実行ファイルのようにファイル名を指定して起動することができない。
このアプリ実行エイリアスは、Microsoftストアで配布するためにMSIXを使ってパッケージ化されたWin32アプリ(デスクトップアプリ)の起動にも使われる。こちらは、実行ファイル名を使って起動は可能だが、パッケージのインストール先が、システムディレクトリ(C:\Program Files\WindowsApps)以下になり、ディレクトリのスキャンができない。
さらにアップデートでパッケージ名が変わるなどの問題があり、直接実行ファイルパスを使わないようにアプリ実行エイリアスを使ってスタートメニューなどに登録される。なお、通常のexe形式実行ファイルの起動に関してはこの連載で以前扱った(「Windowsでプログラムを実行するルールをあらためて掘り下げる」、「Windowsにおけるプログラム実行ルールをさらに詳しく掘り下げる」)。
UWPには、URI起動もあるが、アプリ実行エイリアスは、コマンドラインになるため、引数の指定が可能になるというメリットがある。
アプリ実行エイリアスは、アプリケーションがインストール時に設定するもので、ユーザー固有のものになる。現在利用できるアプリ実行エイリアスは、「設定」→「アプリ」→「アプリの詳細設定」→「アプリ実行エイリアス」で見ることができる。
Windows 11標準のTerminalや新メディアプレーヤー、ペイント、wsl.exe、メモ帳、Teamsなどが、アプリ実行エイリアスで起動されている。また、wingetもアプリ実行エイリアスだ。
各ユーザーのアプリ実行エイリアスは、ユーザーフォルダの下にある「%LOCALAPPDATA%\Microsoft\WindowsApps」フォルダの下に登録されている。これは、where.exeを使っても調べることができる。たとえば、ペイント(mspaint.exe)なら、
where.exe mspaint.exe
とすれば、アプリ実行エイリアスの場所を調べられる。
なお、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なら、
として、情報を出力できる。
このコマンドの出力で戦闘にある「再解析タグ値」が再解析ポイントタグで、「タグ値: 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進ダンプ部分を取り出して加工し、文字列の配列として、バイト配列に変換したのちに文字列化してある。以下は、そのためのコマンドである。
"$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ストア経由なので一応のセキュリティはあるが、何が実行されるのかわからないと不安になる。今回解説した方法を使えば、どこにあるプログラムが起動するのかが明確になり、少しは安心できるはずだ。
この記事に関連するニュース
-
チェック・ポイント・リサーチ、2024年10月に最も活発だったマルウェアを発表 個人情報を狙う“インフォスティーラー”が急増
PR TIMES / 2024年11月28日 15時45分
-
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた
ASCII.jp / 2024年11月24日 10時0分
-
Windows上でhostsファイルを活用する
ASCII.jp / 2024年11月17日 10時0分
-
窓辺の小石 第191回 リンクの冒険
マイナビニュース / 2024年11月8日 17時3分
-
Windows Subsystem for Linuxガイド 第41回 WSL GUI設定
マイナビニュース / 2024年11月7日 15時31分
ランキング
-
1イオンカード、不正利用に関するNHK報道を受け声明 「1日も速く調査結果を報告できるようにする」
ITmedia NEWS / 2024年11月29日 16時52分
-
2LINEアルバム、他人の写真が誤表示される不具合で続報 「30日午前には解消予定」 Android版はアップデートを
ITmedia NEWS / 2024年11月29日 18時51分
-
3クレジットカードを少額で不正利用されていない? 巧妙な新手口を解説
ITmedia エンタープライズ / 2024年11月26日 7時15分
-
4FRONTIERの「ブラックフライデーセール」スタート、高コスパCore i7搭載機やRyzen 7 9800X3D搭載機に注目
マイナビニュース / 2024年11月29日 17時16分
-
5“年利実質18%”で話題、ヤマダ積立のページが閲覧できない状態に 今後の方針、同社に聞いた
ITmedia NEWS / 2024年11月29日 19時35分
記事ミッション中・・・
記事にリアクションする
記事ミッション中・・・
記事にリアクションする
エラーが発生しました
ページを再読み込みして
ください