特定のファイルが Windows で開かれているかどうかを確認するにはどうすればよいですか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/15708

質問

私のお気に入りの Linux ツールの 1 つは次のとおりです。 lsof - 本物のスイスアーミーナイフ!

今日、WinXP システム上のどのプログラムが特定のファイルを開いているのか疑問に思いました。lsof と同等のユーティリティはありますか?さらに、問題のファイルはネットワーク共有上にあったため、それが問題を複雑にするかどうかはわかりません。

役に立ちましたか?

解決

使用 プロセスエクスプローラー Sysinternals Suite から、ハンドルまたは DLL の検索機能を使用すると、そのファイルが開いているプロセスを検索できます。

他のヒント

と同等のもの lsof -p pid sysinternals ハンドルと listdll からの出力を組み合わせたものです。つまり、

handle -p pid
listdlls -p pid

sysinternals で pid を確認できます pslist.

試す ハンドル. ファイルモン & レグモン また、duce プログラム foo がシステムに何をしているかを把握するのにも最適です。

1相当量 lsof Sysinternals からの出力を組み合わせることができます。 ハンドル そして リストdll, 、つまり:

c:\SysInternals>handle
[...]
------------------------------------------------------------------------------
gvim.exe pid: 5380 FOO\alois.mahdal
   10: File  (RW-)   C:\Windows
   1C: File  (RW-)   D:\some\locked\path\OpenFile.txt
[...]

c:\SysInternals>listdlls
[...]
------------------------------------------------------------------------------
Listdlls.exe pid: 6840
Command line: listdlls

  Base        Size      Version         Path
  0x00400000  0x29000   2.25.0000.0000  D:\opt\SysinternalsSuite\Listdlls.exe
  0x76ed0000  0x180000  6.01.7601.17725  C:\Windows\SysWOW64\ntdll.dll
[...]

c:\SysInternals>listdlls

残念ながら、これらを使用するには「管理者として実行」する必要があります。

また リストdll そして ハンドル 連続したテーブルのような形式を生成しないため、ファイル名をフィルタリングすると PID が非表示になります。 findstr /c:pid: /c:<filename> どちらのユーティリティもかなり近くまで使えるはずですが、

c:\SysinternalsSuite>handle | findstr /c:pid: /c:Driver.pm
System pid: 4 \<unable to open process>
smss.exe pid: 308 NT AUTHORITY\SYSTEM
avgrsa.exe pid: 384 NT AUTHORITY\SYSTEM
[...]
cmd.exe pid: 7140 FOO\alois.mahdal
conhost.exe pid: 1212 FOO\alois.mahdal
gvim.exe pid: 3408 FOO\alois.mahdal
  188: File  (RW-)   D:\some\locked\path\OpenFile.txt
taskmgr.exe pid: 6016 FOO\alois.mahdal
[...]

ここで、このファイルを開いているのは gvim.exe であることがわかります。

試す ロック解除者.

Unlocker サイトには、他のツールとの比較を示す気の利いたグラフ (リンクをたどった後に下にスクロールします) があります。通常、このような比較はツールの作成者によって作成されるため、明らかにバイアスがかかっていますが、グラフには少なくとも代替案がリストされているため、自分で試すことができます。

ファイルが .dll の場合は、 タスクリスト コマンド ライン アプリを誰が開いたかを確認するには:

TaskList /M nameof.dll

[コンピュータ] (または [マイ コンピュータ]) アイコンを右クリックし、ポップアップ メニューから [管理] を選択すると、コンピュータ管理コンソールが表示されます。

システム ツール\共有フォルダーの下に、「開いているファイル」があります。これはおそらく希望に近いものですが、ファイルがネットワーク共有上にある場合は、ファイルが存在するサーバー上で同じことを行う必要があります。

「OpenFiles」というプログラムがあり、Windows 7の一部のようです。やりたいことが実現できそうです。(ファイル共有を介して)リモートユーザーによって開かれたファイルをリストすることができ、「openfiles /local on」を呼び出した後、システムの再起動を行うと、ローカルで開かれたファイルを表示できるはずです。後者にはパフォーマンス上のペナルティがあると言われています。

Process Explorer を使用してプロセス ID を見つけます。次に、使用します ハンドル どのファイルが開いているかを確認します。

例: ハンドル -p

Microsoft 自体のユーティリティを使用しているため、このアプローチが気に入っています。

開いたファイルビュー, [オプション] メニューの下に、[ネットワーク ファイルの表示] というメニュー項目があります。おそらく、これを有効にすると、前述のユーティリティが何らかの役に立ちます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top