Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

WindowsでプロセスやSYSTEMによってロックされたファイルのロックを解除する方法

はじめに:ファイルが「使用中」でロックされる理由

Windowsでファイルの削除、名前変更、移動を行おうとした際に、「別のプロセスが使用中のため、この操作を完了できません」といったメッセージが表示されることがあります。通常、ファイルを開いているプログラムの名前はエクスプローラーのダイアログに表示されるため、そのプログラムを閉じるだけでロックは解除されます。

しかし、ファイルやDLLライブラリが不明なプロセスやWindowsのシステムプロセスによって使用されている場合は、そう簡単にはいきません。

ファイルロックの仕組み

多くのアプリケーションは排他モードでファイルを開きます。この状態では、ファイルシステムによってファイルがロックされ、他のアプリやプロセスからの入出力操作がブロックされます。アプリケーションを終了すれば、ファイルのロックは自動的に解放されます。

ロックメッセージの内容は状況によって異なります。たとえば次の例では、ファイルの種類とそれに関連付けられたアプリ名が表示されています。

ファイル/フォルダーは使用中です
この操作を完了できません。ファイルが別のプログラムで開かれています。
フォルダーまたはファイルを閉じてから再試行してください。

この場合は、どのアプリがファイルをロックしているのかすぐに判断でき、該当アプリを閉じるだけで問題は解決します。

一方、次のように、ファイルが不明なプロセスやWindowsのシステムプロセスによって使用されている旨のメッセージが表示されることもあります。Windows自身のプロセスのほか、SYSTEM権限で動作するウイルス対策ソフト、バックアップエージェント、MSSQLデータベースなどが原因となるケースがあります。

この操作を完了できません。ファイルはSYSTEMで開かれています。
ファイルを閉じてから再試行してください。

本記事では、ファイルを使用しているプログラム・サービス・システムプロセスを特定する方法、ファイルのロックを解除する具体的な手順、そして親プロセスを終了せずにロックを解放できるかどうかについて詳しく解説します。

ネットワーク共有フォルダーのファイルが消せない場合

共有ネットワークフォルダー内のフォルダーが削除できない場合は、サムネイルキャッシュを保持するthumbs.dbが原因であるか、SMBファイルサーバー上で他のユーザーがそのファイルを開いてロックしている可能性があります。

最も簡単なロック解除の方法は、ファイルをロックしているプロセスを終了することです。しかし、特に運用中のサーバー環境では、プロセスを勝手に終了できないことも少なくありません。

Unlockerツールの注意点

ファイルをロックしているプロセスの特定にはUnlockerというツールがよく推奨されますが、筆者は使用していません。その理由は以下のとおりです。

  • ロックしているプロセスやプロセスチェーンに関する詳細情報を表示できない
  • 使用中のファイルをハンドル単位で解放できず、アプリケーションごと強制終了するしかない
  • サードパーティ製ツールであり、インストール時に不要なソフトウェアのバンドルを一緒にインストールさせようとするため注意が必要

ファイルハンドルの仕組みと強制解放のリスク

Windowsでプロセスがファイルを開くと、入出力ストリームに対してファイルディスクリプター(ハンドル)が割り当てられます。プロセスとその子プロセスは、このハンドルを通じてファイルへアクセスします。Windows APIを使えば、ファイルシステムにシグナルを送り、特定のファイルハンドルを解放させてロックを解除することが可能です。

注意: ファイルハンドルを強制的に閉じると、アプリケーションやシステムが不安定になる可能性があります。ハンドルを閉じた後に何が起こるか確信が持てない場合は、十分に検証していない限り、本番サーバーでの実行は避けてください。

Process Explorerを使ってファイルのロックを解除する方法

Process Explorerは、Microsoftの公式サイト(https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer)からダウンロードできるSysinternalsスイートの無料ツールです。ファイルをロックしているプロセスを見つけ出し、そのプロセスのファイルハンドルをリセットしてロックを解除してみましょう。

  1. インストール作業は不要です。ダウンロードしてZIPファイルを解凍し、procexp64.exeを管理者として実行します。
  2. メニューの Find → Find Handle or DLL を選択するか、Ctrl+Fキーを押します。
  3. ロックを解除したいファイル名を入力して Search をクリックします。
  4. 検索結果から目的のファイルを選択すると、そのファイルを開いているプロセスが上部のプロセスツリー内で強調表示されます。プロセスを右クリックして Kill Process Tree を選択すればプロセスごと終了できますが、プロセスを終了せずにハンドルだけを閉じることも可能です。下部ペインに表示された該当ファイルのハンドルを右クリックし、Close handle を選択して、確認ダイアログで閉じることを承認します。

下部ペインに開いているハンドルの一覧が表示されない場合は、メニューの View → Lower Pane View → Handles を有効にしてください。

これで親プロセスを終了することなくファイルハンドルを閉じることができました。あとは自由にファイルを削除したり、名前を変更したりできます。

Handleコマンドラインツールでファイルハンドルを解放する方法

Handleは、Sysinternalsに収録されているもう一つのコマンドラインツールです(Microsoft公式サイト https://docs.microsoft.com/en-us/sysinternals/downloads/handle からダウンロード可能)。ファイルをロックしているプロセスを特定し、ハンドルを解放することでロックを解除できます。

  1. Handleのアーカイブをダウンロードして解凍します。
  2. コマンドプロンプトを管理者として開き、次のコマンドを実行します。
    handle64.exe > listproc.txt
  3. このコマンドにより、開いているすべてのハンドルの一覧がtxtファイルに出力されます。対象ファイルが格納されているディレクトリのハンドルのみを表示することもできます。
    Handle64.exe -a "C:\Program Files\App"
    特定のプロセスに絞り込む場合はこちら。
    handle64.exe -p excel.exe
  4. listproc.txtをテキストエディターで開き、ロックされているファイル名を含む行を探します。ハンドルID(16進数)をコピーしたら、その上にあるハンドル所有プロセスのセクションまでさかのぼり、プロセスID(PID)を控えてください。SYSTEMアカウントで実行されているプロセスのPIDは「4」である可能性が高いです。
  5. 一部のWindowsシステムプロセスについては、handle.exeが wininit.exe pid: 732 <unable to open process> のようなメッセージを返すことがあります。これは管理者権限でも当該プロセスの情報を取得できないことを意味します。このようなプロセスが開いているハンドルを確認するには、cmd.exeをSystemアカウントとして実行してから、改めてハンドル一覧を取得してみてください。
  6. コマンドプロンプトに戻り、ハンドルIDとプロセスIDを指定してファイルハンドルをリセットします。コマンドの書式は次のとおりです。
    handle64.exe -c HandleID -p ProcessID
    実行例:
    handle64.exe -c 18C -p 18800
  7. ツールがファイルクローズの確認を求めてきたら、yEnterで承認します。

システムがファイルハンドルのクローズに正常に反応すれば、プロセスを終了したり、サーバーやPCを再起動したりすることなく、ファイルのロックを解除できます。

  1. Windows 10で発生するファイルシステムエラーの直し方|エラーコード別の原因と対処法を徹底解説

    この記事では、Windows 10で発生するファイルシステムエラーを簡単に修復する方法をご紹介します。 ファイルシステムエラーとは? ファイルシステムエラーは、主に破損したファイルやシステムファイルの不整合によって引き起こされます。ウイルス感染や、正常に動作しないアプリケーションが原因となるケースもあります。 実際のエラー画面は以下のような表示になります。 エラーが表示される際には、(-1073741566)、(-2143322101)、(-1073741819)、(-805306367)、(-2147163890)、(-2015294512)、(-2147xxx)といった番号が併記されます

  2. Windows 10でファイルシステムエラーを解決する5つの対処法【エラーコード別】

    ファイルシステムエラーが表示される場合、Windowsのシステムファイルが破損しているか、ハードディスクに不良セクターが存在している可能性があります。このエラーの主な原因はハードディスクに関わる障害とされており、chkdskコマンドを実行するだけで簡単に修復できるケースもあります。ただし、ユーザーのシステム環境によって状況が異なるため、必ずしもすべてのケースで解決できるとは限りません。 .exeファイルを開いたり、管理者権限でアプリを実行したりする際に、「ファイルシステムエラー 2147219196」が発生することがあります。管理者としてコマンドプロンプトを実行してみると、同様のエラーが表示