Windows 11でファイルを使用中のプログラムを特定する4つの方法

このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています。
Windows 11でファイルを使用中のプログラムを調べる4つの方法を紹介するイメージ

Windowsでファイルを削除・移動・リネームしようとすると「別のプログラムがこのファイルを開いているため、操作を完了できません」といったエラーが表示されることがあります。

まず確認したいのはエラーダイアログにプログラム名が表示されているかどうかです。使用中のアプリが分かればそのアプリでファイルを閉じるだけで操作できる場合があります。

ただ、いつも名前が表示されるとは限らず「別のプログラム」としか出ない場合や表示されたアプリを閉じてもエラーが消えない場合はファイルを使用しているプロセスを調べる必要があります。

この記事ではWindows標準のリソースモニターと、Microsoft公式のPowerToys・Process Explorer・Handleを使った4つの調べ方を紹介します。原因のアプリや処理が分かればPCを再起動せずに対処できることもあります。

目次

「別のプログラムがこのファイルを開いています」とは?

このエラーはほかのプログラムがファイルを使用していて、削除や移動などの操作が制限されているときに表示されます。以降、こうした使用中の状態によって操作が制限されることを「ファイルロック」と表現しますね。

Windowsではプログラムが開いたファイルへの参照を「ハンドル」で管理しています。ファイルを開いているだけで必ず削除できなくなるわけではなく、そのプログラムが他の処理による読み書きや削除をどこまで許可しているかによって変わります。

アプリのウィンドウを閉じてもバックグラウンドの処理がファイルを使い続けている場合があります。画面上では何も開いていないように見えるのにエラーが出続けるのはこのためです。

エラー画面にプログラム名が表示されていればまずはそのアプリを確認します。アプリが分からない場合はハンドルなどの情報からファイルを使用しているプロセスを探せます。

まずはエラー画面に表示されたプログラム名を確認する

エラーが出たらメッセージの中に具体的なプログラム名が書かれていないか確認してください。

lock-test.txtがPowerShell 7によって開かれていると表示されたWindowsのエラー画面
この例ではエラー画面に「PowerShell 7」と表示されています。

該当するアプリで作業内容を保存して対象のファイルを閉じてから削除・移動・リネームをやり直します。それでも操作できない場合は、そのアプリ自体を通常の操作で終了して試してください。

プログラム名が表示されていなくても直前までそのファイルを編集・再生していたアプリに心当たりがあれば、同じように確認します。

エクスプローラーで対象ファイルを選択している場合はプレビューウィンドウを閉じて試す方法もあります。エクスプローラー自体の使用が疑われるときは、ファイルのコピーや移動が終わっていることを確認してからタスクマネージャーで「エクスプローラー」を選び「再起動」を実行します。

使用中のプログラムが分からない場合やアプリを閉じてもエラーが続く場合は、次の方法で調べることができます。

ファイルを掴んでいるプロセスを調べる方法

エラー画面だけでは原因を特定できないときはWindows標準機能やMicrosoft公式ツールでファイルを使用しているプロセスを確認できます。

追加ソフトを入れずに調べたいならリソースモニター、すでにPowerToysを使っているならFile Locksmithが取りかかりやすい方法です。

方法利用前の準備向いている場面
リソースモニター不要。Windows標準搭載追加ソフトなしで調べたい
PowerToys「File Locksmith」PowerToysをインストール対象ファイルの右クリックから調べたい
Process Explorerダウンロードして展開プロセスやハンドルの詳細を確認したい
Handleダウンロードして展開コマンドで検索したい

4つすべてを試す必要はありません。使いやすい方法で対象のプロセスが見つかればそのアプリや処理を確認してください。

なお、検索結果に表示されたプロセスが必ず削除を妨げているとは限りません。対象ファイルのパスとプロセス名を照合して判断します。

リソースモニターで調べる(追加インストール不要)

Windows標準機能だけで調べたいなら、まずリソースモニターを試してみてください。

  1. Win + Rキーを押して「ファイル名を指定して実行」を開きます。
  2. resmonと入力しEnterキーを押します。
  3. 「CPU」タブを開きます。
  4. 「関連付けられたハンドル」を展開して検索ボックスに対象のファイル名を入力してEnterキーを押します。
  5. 検索結果のプロセス名・PID・ファイルのパスを確認します。
リソースモニターでlock-testを検索し、Dドライブのlock-test.txtを使用するpwsh.exeとPID 30104を表示した画面
「イメージ」でプロセス名、「ハンドル名」で対象ファイルのパスを確認できます。

PIDは実行中のプロセスを識別する番号です。同じ名前のプロセスが複数動いている場合もPIDで区別できます。

ファイル名は一部だけでも検索できます。同名の別ファイルが見つかる場合もあるため検索結果のパスまで確認してください。候補が多いときはフォルダー名を含めて検索すると絞り込みやすくなります。

PowerToysの「File Locksmith」で調べる

対象ファイルの右クリックから確認したい場合はMicrosoft公式のPowerToysに含まれる「File Locksmith」が便利です。ファイルやフォルダーを選びそれらを使用しているプロセスを調べられます。

wingetコマンドを実行してインストールできます。

PowerShell
winget install --id Microsoft.PowerToys --source winget

wingetの検索・更新・アンインストールについては次の記事にまとめています。

インストールできたら次の手順で確認します。

  1. PowerToysの設定画面で「File Locksmith」を有効にします。
  2. エクスプローラーで対象のファイルやフォルダーを右クリックします。
  3. File Locksmithの項目が見当たらない場合は「その他のオプションを表示」を開きます。
  4. 「File Locksmith でロックを解除」を選び表示されたプロセスの一覧を確認します。
lock-test.txtの右クリックメニューで「File Locksmith でロック解除」を選ぶ画面

→

↓

File Locksmithでlock-test.txtを使用するpwsh.exeが表示された画面
一覧に表示されたらまずは使用元のアプリ側でファイルを閉じます。

メニューの表記はPowerToysのバージョンや表示言語によって異なる場合があります。

結果が出ないときはFile Locksmithの「管理者として再起動」を試してください。別のユーザーが実行しているプロセスは通常の起動では一覧に表示されないことがあります。

Process Explorerで詳しく調べる

プロセスやハンドルの情報を詳しく確認したい場合はMicrosoftのSysinternalsツールであるProcess Explorerが使えます。

ファイル名を検索してどのプロセスがそのファイルを開いているかを調べられます。公式サイトからダウンロードして展開すればインストール作業なしで実行できます。公式ページに記載されている動作要件はWindows 11以降とWindows Server 2019以降です。

  1. Process Explorer公式ページからZIPファイルをダウンロードして展開します。
  2. 通常の64ビット版Windows環境ではprocexp64.exeを実行します。
  3. 初回起動時にライセンスの内容を確認し「agree」で同意します。
  4. Ctrl + Fキーを押す、またはメニューの「Find」→「Find Handle or DLL」を開きます。
  5. 対象のファイル名やパスの一部を入力し「Search」をクリックします。
  6. 検索結果のプロセス名・PID・対象のパスを確認します。
Process Explorerでlock-testを検索し、Dドライブのlock-test.txtを使用するpwsh.exeとPID 30104を表示した画面
検索結果のプロセス名・PID・パスを照合して対象を確認します。

検索結果の項目をダブルクリックするとメイン画面で対応するプロセスとハンドルを確認できます。通常の起動で確認できないプロセスは管理者として実行すると情報を確認できる場合があります。

コマンドラインのHandleで調べる

GUIを開かずに検索したい場合や調査結果をスクリプトで扱いたい場合はSysinternalsのHandleが向いています。

Handle公式ページからZIPファイルをダウンロードして展開して管理者権限のPowerShellで展開先のフォルダーを開きます。

通常の64ビット版Windows環境でファイル名にlock-test.txtを含むハンドルを検索する例です。検索する文字列は対象のファイル名やパスの一部に置き換えてください。

PowerShell
.\handle64.exe "lock-test.txt"
実行結果例
Nthandle v5.0 - Handle viewer
Copyright (C) 1997-2022 Mark Russinovich
Sysinternals - www.sysinternals.com

pwsh.exe           pid: 30104  type: File          1BF8: D:\lock-test.txt

結果には該当するファイルへの参照を持つプロセス名とPIDなどが表示されます。

よく使うオプションは次のとおりです。

オプション用途
-p対象をプロセス名の先頭部分またはPIDで絞る
-u実行ユーザー名を表示する
-vカンマ区切りのCSV形式で出力する
-vtタブ区切りで出力する

使用中のプロセスが分かったらまずアプリ側で閉じる

ファイルを使用しているプロセスが分かったら、まずは対応するアプリで作業内容を保存し対象ファイルを閉じます。必要に応じてアプリ自体も通常の操作で終了しファイルを操作できるか確認してください。

アプリが応答しないなど通常の方法で終了できない場合はタスクマネージャーやFile Locksmithの「タスクの終了」を検討します。強制終了すると未保存の内容が失われたり実行中の処理が中断されたりする点には注意が必要です。

Process ExplorerやHandleにはプロセスを終了せずにハンドルだけを強制的に閉じる機能もありますが、アプリが使用中の参照を外部から切り離すためアプリやシステムが不安定になるおそれがあります。

ファイルを操作できるようにしたい場合も、まずはアプリ側でファイルを閉じる方法を優先してください。

PowerShellで使用中の状態を再現する

エラー画面に表示される名前と調査ツールで見つかるプロセスを見比べたい場合はPowerShellで検証用ファイルを開いたままにする方法があります。

次のコードは、一時フォルダーに専用の検証フォルダーとファイルを作りほかのプロセスとの共有を許可せずに開きます。普段使っているファイルを指定する必要はありません。

PowerShell
$testDir = Join-Path ([System.IO.Path]::GetTempPath()) (
    "lock-test-" + [guid]::NewGuid().ToString("N")
)
New-Item -ItemType Directory -Path $testDir | Out-Null

$file = Join-Path $testDir "lock-test.txt"
Set-Content -LiteralPath $file -Value "検証用ファイルです" -Encoding utf8

$stream = $null

try {
    $stream = [System.IO.File]::Open(
        $file,
        [System.IO.FileMode]::Open,
        [System.IO.FileAccess]::ReadWrite,
        [System.IO.FileShare]::None
    )

    Write-Host "対象ファイル: $file"
    Write-Host "このPowerShellのPID: $PID"
    Read-Host "確認が終わったらEnterキーを押して解放してください" | Out-Null
}
finally {
    if ($null -ne $stream) {
        $stream.Dispose()
    }
}

入力待ちの状態になったら表示されたフォルダーをエクスプローラーで開き、lock-test.txtの削除や名前変更を試します。

このとき、まずエラー画面にプログラム名が表示されるかを確認してください。「別のプログラム」と表示されることを前提にせず、実際の表示を見てみます。

次に、リソースモニターなどでlock-test.txtを検索し結果のPIDがPowerShellに表示された値と一致するか確認します。PowerShell 7ではpwsh.exe、Windows PowerShell 5.1ではpowershell.exeが確認対象です。

確認が終わったら、コードを実行したPowerShellでEnterキーを押してファイルを解放します。その後、不要になった検証フォルダーを削除してください。

それでも見つからない・解決しない場合

検索してもプロセスが見つからない場合は、まず検索する文字列と実行権限を確認します。

ファイル名だけでは候補が多すぎたりフルパスでは一致しなかったりすることがあります。ファイル名・フォルダー名・パスの一部を使い分け、結果に対象ファイルが含まれているか確認してください。

通常の権限で見つからなければ管理者として調査ツールを起動して再検索します。File Locksmithの場合は画面内の「管理者として再起動」も使えます。

また、エラーが出た瞬間と検索した瞬間でファイルの使用状況が変わっていることもあります。同期やスキャンなどの一時的な処理が終わっていれば、検索結果に表示されない場合があります。少し待ってからファイル操作をやり直すか、症状が出ている間に再検索してみてください。

ネットワーク上の共有フォルダーでは別のPCやサーバー側のプロセスが使用している可能性もあります。自分のPCの調査だけで見つからない場合は共有元の管理者に確認します。

原因を特定できず操作できない状態が続く場合は作業内容を保存してPCを再起動する方法もあります。再起動後も同じ症状が出る場合は自動起動するアプリやサービスが対象ファイルを使用していないか確認してください。

迷いやすいポイント

見つかったプロセスをそのまま終了させても大丈夫?

まずはファイルをロックしているアプリを確認し、作業内容を保存してから通常の操作で閉じてください。強制終了は、アプリが応答しない場合などに限って検討します。用途が分からないプロセスやシステム関連のプロセスは、安易に終了しないでください。

エラー画面と調査ツールで表示される名前が違うのはなぜ?

エラー画面にはアプリの表示名、調査ツールにはpwsh.exeのような実行ファイル名が表示される場合があります。同名のプロセスが複数ある場合はPIDで区別します。

まとめ

  • エラー画面にプログラム名が出ていたらまずはそのアプリでファイルを閉じてみよう。
  • 名前が分からない・閉じても解決しないときはWindows標準のリソースモニターで調べられるよ。
  • 右クリックから確認するならFile Locksmith、詳しく調べるならProcess Explorer、コマンドで検索するならHandleが使えるよ。
  • 使用中のプロセスが分かってもいきなり強制終了せず、まずはアプリ側で保存して閉じよう。

Windowsの設定や、ほかのトラブルの対処法を探したい場合はこちらのまとめから確認できます。

  • URLをコピーしました!
目次