Windowsでファイルをロックしたプロセスを特定する方法

プロセスによって使用されているファイルまたはフォルダーを削除しようとすると、[使用中のファイル]ダイアログが表示され、ファイルをロックしたプログラムの名前が示されます。

ただし、[使用中のファイル]ダイアログに、削除しようとしているファイルがロックされているプロセスの名前が表示されない場合があります。 場合によっては、ダイアログに「ファイルがで開かれているため、アクションを完了できません」と表示されます。 別のプロセス“.

ファイルをロックしたプロセスを見つける

プロセスとロックされたファイルを調査する場合、Windows Sysinternals Process Explorerは、おそらくほとんどのユーザーにとって最初に頭に浮かぶオプションです。 ただし、2つあります 組み込みソリューション 現在開いているファイルのリストを対応するプロセス名とともに表示します。

以下を使用して、ファイルをロックしたプロセスを見つけます。

  1. リソースモニター(resmon.exe)
  2. MicrosoftSysinternalsのProcessExplorer
  3. MicrosoftSysinternalsからのハンドル
    • 右クリックメニューからファイルハンドルを検索
  4. Openfiles.exeビルトインコンソールツール
    • ローカルファイルハンドルの追跡を有効にする
    • 開いているファイルと対応するプロセス名を表示する
    • 共有フォルダから開いたファイルを切断します
  5. Nirsoft.netからのOpenedFilesView(サードパーティ)

1. リソースモニター

リソースモニター(resmon.exe)は、多くの便利な機能を備えた組み込みツールです。 Resource Monitorを使用すると、次のことができます。 現在のネットワークとインターネットの使用状況を追跡する、関連するハンドルを表示 ロックされたファイル、およびタスクマネージャを使用するのと同じようにプロセスを管理します。

ファイルがロックされているプロセス名を見つけるには、[CPU]タブをクリックし、[関連付けられたハンドル]テキストボックスにファイル名またはその一部を入力します。

ファイルをロックしたプロセスを見つける

リソースモニターについては前に説明しました。 これらの記事をチェックしてください:

  • リソースモニターを使用して、ファイルをロックしているプロセスを見つける方法は?
  • どのプログラムがすべてのインターネット帯域幅を使用していますか? リソースモニターを使用して検索

2. プロセスエクスプローラー

プロセスエクスプローラー 紹介する必要はありません。 Process Explorerでは、検索機能を使用してファイル名を入力するだけです。 これは、ファイルにアクセスしているプロセスを示しています。

ファイルをロックしたプロセスを見つける

下のペインビューから、必要に応じてファイルハンドルを閉じることができます。

昇格して実行されているプロセスを管理するには、管理者としてProcessExplorerを実行する必要があります。 Process Explorerを昇格するには、[ファイル]メニュー→[ファイル]をクリックします。 すべてのプロセスの詳細を表示.

これらのProcessExplorer関連の記事を確認してください。

  • Windowsで頑固な削除できないファイルまたはフォルダを削除する方法は?
  • 現在Webカメラを使用しているプログラムを見つける
  • 不明なエラーメッセージの原因となったプログラムを見つける方法は?
  • コンテナ内のオブジェクトの列挙に失敗したとはどういう意味ですか?

3. WindowsSysinternalsからのハンドル

取り持つ は、システム内の任意のプロセスの開いているハンドルに関する情報を表示するMicrosoftSysinternalsのユーティリティです。 これを使用して、ファイルが開いているプログラムを確認したり、プログラムのすべてのハンドルのオブジェクトタイプと名前を確認したりできます。 ハンドルは、のコマンドラインバージョンのようなものです プロセスエクスプローラー.

ノート: ハンドルv4.21には 小さなバグ ドライブ文字が大文字の場合、常に「一致するハンドルが見つかりません」と報告されます。 Microsoftが次のアップデートで修正することを願っています。

から adminコマンドプロンプト ウィンドウで、コマンドライン構文を使用して、ファイルを開いているプロセスを見つけます。

handle.exe -a -u filename_with_path

ファイル名にスペースが含まれている場合は、二重引用符で囲みます。

例:

handle.exe -a -u "c:\ users \ ramesh \ desktop \ Mandate-form.pdf"
ロックされたファイルを見つける-sysinternalsが処理する

(パスなしでファイル名に言及することは、必ずしもすべての状況で機能するとは限りません。 常にフルパスを含めることをお勧めします。)

出力には、プロセス名、プロセスID、ユーザー名、ロックされた(ターゲット)ファイル名とパスが表示されます。

Sysinternalsハンドル:コマンドライン引数

使用法:ハンドル[[-a [-l]] [-u] | [-c [-y]] | [-s]] [-p |] [名前] [-nobanner]
-a すべてのハンドル情報をダンプします。
-l ページファイルに裏打ちされたセクションハンドルを表示するだけです。
-c 指定されたハンドルを閉じます(16進数として解釈されます)。
PIDでプロセスを指定する必要があります。警告:ハンドルを閉じると、アプリケーションまたはシステムが不安定になる可能性があります。
-y クローズハンドルの確認を求めないでください。
-s 開いている各タイプのハンドルのカウントを印刷します。
-u ハンドルを検索するときに所有しているユーザー名を表示します。
-p プロセスに属するダンプハンドル(部分名を受け入れます)。
名前 でオブジェクトへのハンドルを検索 (フラグメントは受け入れられます)。
-nobanner スタートアップバナーと著作権メッセージを表示しないでください。

引数がない場合、すべてのファイル参照がダンプされます。

右クリックメニューにSysinternalsハンドルを追加

ファイルの右クリックメニューにSysinternalsハンドルを追加すると、ファイルをロックしているプログラムをすばやく見つけることができます。 コンテキストメニューに追加するには、次の手順に従います。

  1. ダウンロード 取り持つ MicrosoftSysinternalsサイトから。
  2. ファイルをコピーする handle.exe & handle64.exe フォルダへ–例: d:\ tools
  3. 次のコード行をメモ帳にコピーし、ファイルを次のように保存します find_handle.vbs 恒久的な場所に。
    'filename引数を指定してSysinternalsHandle.exeユーティリティを実行します。 '©RameshSrinivasan- https://winhelponline.com/blog. '作成日:2008年3月29日。 '更新日:2019年6月11日。 'Windows 10 OptionExplicitを含むすべてのバージョンのWindows用。 Dim objShell、WshShell、objFSO、sBaseKey、sFilename。 objShell = CreateObject( "Shellを設定します。 応用") WshShell = CreateObject( "WScriptを設定します。 シェル") objFSO = CreateObject( "Scriptingを設定します。 FileSystemObject ") WScriptの場合。 引数。 Count = 0 Then sBaseKey = "HKCU \ Software \ Classes \ * \ shell \" WshShell。 RegWrite sBaseKey& "FindHandle \"、 "Find Handle"、 "REG_SZ" WshShell。 RegWrite sBaseKey& "FindHandle \ command \"、 "wscript.exe" && _WScript。 ScriptFullName && "" && "%1"&、 "REG_SZ" Else If objFSO.FileExists(WScript。 引数(0))= True Then sFilename = lcase(WScript。 引数(0))objShell。 ShellExecute "cmd.exe"、 "/ k d:\ tools \ handle.exe -a -u"&_&sFilename&、 ""、 "runas"、1 EndIf。 終了する場合

    ノート: SysinternalsHandle.exeパスは次のようにハードコードされています d:\ tools \ handle.exe 上記のスクリプトで。 プログラムが別のパスにある場合は、それに応じてスクリプトのパスを変更します。 64ビットWindowsの場合、次のいずれかを使用できます handle.exe また handle64.exe

  4. ダブルクリック find_handle.vbs レジストリにコンテキストメニューエントリを追加します。 これは1回だけ行う必要があります。 ただし、スクリプトを別のフォルダに移動する場合は、スクリプトをもう一度ダブルクリックして、レジストリのパスを更新する必要があります。
  5. が表示されます ハンドルを探す ファイルを右クリックするときのオプション。 それをクリックすると、スクリプトが起動し、filename引数を指定してhandle.exeが実行され、ファイルがロックされているプロセスが検索されます。ロックされたファイルを見つける-sysinternalsが処理する

を削除するには ハンドルを探す コンテキストメニューエントリ、レジストリエディタを起動します(regedit.exe)そして次のキーを削除します:

HKEY_CURRENT_USER \ Software \ Classes \ * \ shell \ FindHandle

4. OpenFiles.exe —組み込みのコンソールツール

これから使用するもう1つの組み込みツールは、Windowsに新しくないコンソールツールであるOpenfiles.exeです。 もともとは、Windows Resource Kit2000 / 2003ツールの一部として2000年に導入されました。 このユーティリティは、Windows Vista以降(Windows 10を含む)にデフォルトで含まれていました。 Openfilesは、ローカルフォルダーまたは共有フォルダーから現在開いているファイルリストを、ハンドルIDとプロセス実行可能ファイル名とともに表示します。 このツールを使用すると、共有フォルダーからリモートで開いている1つ以上のファイルを切断することもできます。

「オブジェクトリストの保守」グローバルフラグを初めて有効にする

まず、ローカルファイルハンドルの追跡を有効にするには、adminコマンドプロンプトから次のコマンドを実行して、「オブジェクトリストの維持」フラグをオンにする必要があります。

openfiles / local on

次のメッセージが表示されます。

情報:システムグローバルフラグ「オブジェクトリストの更新」が現在有効になっています。

このコマンドを実行する必要があるのは初めてです。 次に、変更を有効にするためにWindowsを再起動します。

開いているファイルと対応するプロセス名を表示する

Windowsを再起動した後、 adminコマンドプロンプト ウィンドウ、タイプ:

openfiles

これにより、ファイル/ハンドルID、プロセス名、およびローカルで開かれた、またはローカル共有ポイントを介してリモートで開かれたファイルのリストが表形式で一覧表示されます。

リストまたはCSV形式で出力を表示するには、/ queryパラメーターを使用します。

openfiles / query / FOLIST。 openfiles / query / FO CSV

出力をクリップボードにコピーするには、以下のように出力をClip.exeにパイプします。 次に、出力をメモ帳またはその他の任意のエディターに貼り付けます。

openfiles |クリップ
ファイルをロックしたプロセスを見つける
openfiles / query / FO LIST | clip。 openfiles / query / FO CSV |クリップ
ファイルをロックしたプロセスを見つける

コマンドプロンプト出力をクリップボードにコピーするか、出力をファイルに保存する方法の詳細については、記事を確認してください。 コマンドプロンプトの出力テキストをクリップボードにコピーする方法、またはファイルに保存する方法は?

特定のファイルがプログラムによって使用されているかどうかを確認する(およびどのプログラムを使用しているかを知る)には、次のコマンドラインを使用できます。

openfiles | findstr / i 

例:

openfiles | findstr / i eiffel

上記のコマンドは、ファイル名に「eiffel」という単語を含むすべての開いているファイルを一覧表示します。 この例では、Word 2016は現在、ファイル「The EiffelTower.docx」(ID 4576)をロックしています。

ファイルをロックしたプロセスを見つける

そして、「使用中のファイル」ダイアログは私に同じことを教えてくれます。

ファイルをロックしたプロセスを見つける

共有フォルダからリモートで開いたファイルを切断します。

共有フォルダから開いたファイルを切断して、ファイルの削除、名前の変更、または内容の変更を行うには、 /disconnect そのファイルへの接続を切断するパラメータ。 コマンドラインオプションは次のとおりです。

OPENFILES / Disconnect [/ S system [/ U username [/ P [password]]]] {[/ ID id] [/ Aaccessedby] [/ O openmode]} [/ OP openfile] 説明:管理者は、共有を介してリモートで開かれたファイルとフォルダーを切断できます フォルダ。 パラメータリスト:/ Ssystem接続するリモートシステムを指定します。 / U [domain \] userコマンドを実行するユーザーコンテキストを指定します。 / P [password]指定されたユーザーコンテキストのパスワードを指定します。 / IDidファイルIDで開いているファイルを切断するように指定します。 「*」ワイルドカードを使用できます。 / Aaccessedby「accessedby」値で開いているすべてのファイルを切断するように指定します。 「*」ワイルドカードを使用できます。 / Oopenmode「openmode」値ですべての開いているファイルを切断するように指定します。 有効な値は、読み取り、書き込み、または読み取り/書き込みです。 「*」ワイルドカードを使用できます。 / OPopenfile特定の「オープンファイル」名によって作成されたすべてのオープンファイル接続を切断するように指定します。 「*」ワイルドカードを使用できます。 /? このヘルプメッセージを表示します。 例:OPENFILES / Disconnect /? OPENFILES / Disconnect / ID 1 OPENFILES / Disconnect / A username OPENFILES / Disconnect / O Read / Write OPENFILES / Disconnect / OP "c:\ My Documents \ somedoc.doc "/ ID 234 OPENFILES / Disconnect / S system / U username / ID 5 OPENFILES / Disconnect / S system / U username / P password / ID *

Openfiles.exeは、開いているすべてのファイルとプロセス名を完全に一覧表示しますが、プロセスを強制的に強制終了することはできません。 ただし、この優れた(ただし見落とされている)組み込みコンソールツールは、使用しているプロセス名をすばやく見つけたい場合に便利です。 サードパーティに依存せずに、ファイル、またはネットワークユーザーが共有フォルダを介してアクセスしているファイルを切断する 解決。

5. OpenedFilesView

OpenedFilesView from Nirsoftは、システムで開いているすべてのファイルのリストを表示します。 開いたファイルごとに、追加情報が表示されます:ハンドル値、読み取り/書き込み/削除アクセス、ファイル位置、プロセス ファイルを開いたファイルなど…オプションで、開いている1つ以上のファイルを閉じるか、これらを開いたプロセスを閉じることもできます。 ファイル。

ファイルをロックしたプロセスを見つける

選択したファイルのプロセスを閉じるか、選択したファイルハンドルを閉じることができます。 ハンドル番号は16進値で表されますが、openfiles.exeコンソールツールは通常の形式で表示します。 このツールでは、右クリックメニューを使用して、現在ファイルを使用しているプロセスをすばやく見つけるためのコンテキストメニューオプションを追加することもできます。 コンテキストメニューオプション/コマンドラインサポートは、OpenedFilesViewが提供する最も便利な機能の1つだと思います。


1つの小さなリクエスト:この投稿が気に入った場合は、これを共有してください。

あなたからの1つの「小さな」共有は、このブログの成長に真剣に役立つでしょう。 いくつかの素晴らしい提案:
  • ピンする!
  • お気に入りのブログ+ Facebook、Redditに共有してください
  • ツイートしてください!
読者の皆様、ご支援ありがとうございました。 それはあなたの時間の10秒以上かかることはありません。 共有ボタンはすぐ下にあります。 :)

エゾイックこの広告を報告する