読者です 読者をやめる 読者になる 読者になる

ファイルを開いているプロセスを調べる

以前『ファイルの使用者を調べる PowerShell Cmdlet』というエントリを書いたせいか,明らかに「ファイルを開いているプロセスを今すぐ調べたい」という感じの検索語でうちの日記に来られる方が多いようです.
ファイルの使用者を調べる PowerShell Cmdlet』で示した方法は,技術的興味から作ってみただけの,不完全かつ使いにくいものなので,本当に「ファイルを開いているプロセスを今すぐ調べたい」という方にはおすすめできるものではありません.
参考までに,そういうときに私がどうしているかについて軽く書いておきます.

handle.exe

sysinternals 社の Mark Russinovich 氏によって作成・公開され,同社の買収によって Microsoft サイトで公開されるようになった handle.exe というコマンドラインツールがあります.

このツールを使用すると,実行中のプロセスが所有しているハンドルの一覧をダンプすることができます.そして,そのリストの中にファイルハンドルも含まれています.
削除したり移動したりできなくなったファイルやフォルダがあって困っているときは,まずこの handle.exe の実行結果を見てみます.もし問題のファイルやフォルダのハンドルを所有しているプロセスがあれば,そのプロセスを終了することでファイル操作ができるようになるでしょう.
あるいは,handle.exe にはプロセスの開いている特定のハンドルを外部から強制的に閉じるという機能もあるので,それを使って閉じるということも可能です.

Process Explorer

同じく Mark Russinovich 氏によって作成された Process Explorer を使っても,ファイルやフォルダを開いているプロセスを調べることができます.

Process Explorer を起動し,メニューから Find → Find Handle or DLL を選びます.すると以下のようなダイアログが表示されるので,問題のファイル名またはフォルダ名を入力してください.関連するハンドル一覧が表示されます.