メモ帳を別フォルダにコピーすると起動しない理由

あるときメモ帳 (notepad.exe) を別のフォルダにコピーしたところ、コピーしたメモ帳が起動しないことに気づきました。

たとえば、次の画面のように「C:\Windows」フォルダ内の「notepad.exe」を「C:\tmp」フォルダ内にコピーすると、コピー先の「notepad.exe」をダブルクリックしてもメモ帳が起動しません。


なぜ起動しないのか、原因を調べてみました。

動作確認環境

  • Windows 10 Home 21H1, 64bit

Process Monitor による調査

こうした事象を調べるのに適したツールとして、Windows Sysinternals の「Process Monitor」があります。指定したプログラムの内部動作、具体的にはファイルやレジストリやスレッドなどを操作する様子をログに記録してくれます。

それでは調査します。

  1. Process Monitor を起動します。
  2. フィルターの設定画面で「メモ帳」を調査対象に指定します(「Process Name is notepad.exe then Include」を [Add] します)。



  3. ツールバー上のボタンで、ファイルやレジストリなどの操作をキャプチャするよう指示します( [Capture] [Show Registry Activity] [Show File System Activity] [Show Network Activity] [Show Process and Thread Activity] を有効にします)。



  4. 起動しないほうの「notepad.exe」をダブルクリックします。
  5. 画面上に表示された動作ログを調べます。



ログを見ると、「Process Start」でプロセス開始後、「Load Image」で「notepad.exe」「ntdll.dll」「kernel32.dll」などの各種モジュールを順調にロードしているのですが、最終的に「Process Exit」でプロセス終了していました。しかし、ログが 1000 行近くあり、なぜプロセス終了に至ったのかが分かりません。

そこで、正常に起動するほうの「notepad.exe」で同様のログを取得し、比較してみました。その結果、次の箇所が怪しいことが分かりました。

 【起動しないほうのメモ帳のログ(抜粋・編集)】
  CreateFile(Disposition: Open), C:\tmp\ja-JP\notepad.exe.mui -> PATH NOT FOUND
  CreateFile(Disposition: Open), C:\tmp\ja\notepad.exe.mui -> PATH NOT FOUND
  CreateFile(Disposition: Open), C:\tmp\en-US\notepad.exe.mui -> PATH NOT FOUND
  CreateFile(Disposition: Open), C:\tmp\en\notepad.exe.mui -> PATH NOT FOUND

 【正常に起動するメモ帳のログ(抜粋・編集)】
  CreateFile(Disposition: Open), C:\Windows\ja-JP\notepad.exe.mui -> SUCCESS,

「起動しないほうのメモ帳のログ」では、「notepad.exe.mui」をあちこち探し回っていますが、最終的に見つからずに終わっています。一方、「正常に起動するメモ帳のログ」では、一発で見つかっています。

解決

「notepad.exe」だけでなく「ja-JP\notepad.exe.mui」も相対パスを維持したままコピーすることで、コピー先のメモ帳も起動するようになりました。つまり、次のようなファイル構成になります。

  C:\TMP
  │ notepad.exe
  │
  └─ja-JP
     notepad.exe.mui

ちなみに、「ja-JP\notepad.exe.mui」ではなく「en-US\notepad.exe.mui」のほうをコピーすると、メニューが英語になりました。