Windows 11でファイルを削除・リネームしようとしたとき、そのファイルを使用中のアプリを閉じたはずなのに「別のプログラムで開かれています」というダイアログが表示されることがあります。この長年の謎について、Microsoftが技術的な背景と実用的な対処法を明らかにしました。Mark Russinovich氏(Azure CTO)が語る内容は、Windowsの内部動作を知るうえでとても興味深いものとなっています。ファイルがロックされ続ける本当の理由同氏によると、この問題は「別のプログラムが開いている」というメッセージから想像できる単純なものではなく、より複雑な要因が絡んでいるそうです。Windowsはファイルを開くときに「ハンドル」という参照を作り、ハンドルが残っている限り削除やリネームを許しません。しかしアプリを閉じてもハンドルが残る場合があり、これが削除できない原因となっているのです。以下の3つの理由によってハンドルが残ります。1. ウイルス対策ソフトが裏でスキャンしているアプリは閉じても、ウイルス対策ソフトが同じファイルを読み取っているとハンドルが残ります。2. ネットワーク上の別PCがファイルを参照している共有フォルダなどで、他のPCがまだファイルを開いている場合もロックが続きます。3. DLLとして読み込まれている最も厄介なのがこれです。ファイルがDLLとしてプロセスに読み込まれている場合、通常のハンドル一覧には表示されません。プロセスのメモリ空間にマップされているため、アプリ全体を終了しない限りロックは解消されません。どのプロセスがファイルを掴んでいるか調べる方法どのプロセスがファイルを掴んでいるかを調べるには、Russinovich氏が1990年代に作った Sysinternalsの「Handle」と 「Process Explorer」が今も有効です。Handle:コマンドラインで全ハンドルを一覧表示Process Explorer:GUIで検索可能(Ctrl + Shift + F)→ ファイル名を入力すると、どのプロセスが掴んでいるか一発で判明します。さらに最近は PowerToysの「File Locksmith」 が一般ユーザー向けの解決策として人気です。右クリックからロックしているプロセスを確認し、その場で終了できます。Russinovich氏はまた、どうしてもプロセスを終了できない場合に、ファイルを削除ではなく「リネーム」する方法を紹介しています。Windowsは状況によっては、ロック中でもリネームを許可します。リネーム後に同名の新しいファイルを置けば、他のプロセスは新しいファイルを参照します。古いファイルは、ロックが解けたタイミングで削除できます。まとめWindowsのファイルハンドル管理は、Win32時代から続く深い仕組みに根ざしています。Russinovich氏自身が「2026年になってもSysinternalsが必要になるとは思わなかった」と語るほど、根本的な構造は変わっていません。[via Windows Latest]