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


87

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

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

回答:


74

使用プロセスExplorerがSysinternalsのスイートから、検索ハンドルやDLL関数を使用すると、開いているファイルを使用してプロセスを検索できるようになります。


これは本当に質問に答えますか?Process Explorerを使用すると、特定のプロセス/ハンドル/ dllなどに対して開いているファイルを確認できますが、これは逆のマッピングです。この質問に対する私の答えstackoverflow.com/questions/15708/…を参照してください。
グレッグマット

6
はい、そうです。[ハンドルの検索]または[DLL]をクリックして(またはCtrl-Fを押して)、検索しているファイルの名前を入力すると、そのファイルが開いているプロセスのリストが表示されます。
Jay Hofacker 2008年

Process Explorerの名前が変更され、「ProcessMonitor」にバンドルされました。
Matthew McCullough

7
@MatthewMcCullough参照はありますか?あなたは間違っています、ProcessExplorerProcessMonitorは2つの異なるユーティリティです。
Alois Mahdal 2012年

2
Process Explorerにはコマンドラインインターフェイスがありますか?
アンダーソングリーン

40

に相当するのlsof -p pidは、sysinternalsハンドルとlistdllからの出力を組み合わせたものです。

handle -p pid
listdlls -p pid

sysinternalsでpidを見つけることができますpslist


これには、Windows 10のような標準のWindowsインストールが付属していますか?
モーテン

10

ハンドルを試してください。 FilemonRegmonは、duceプログラムfooがシステムに対して何をしているのかを理解しようとするのにも最適です。


@slipsec FileMonおよびRegmonは 、Windows 2000 SP4、Windows XP SP2、Windows Server 2003 SP1、およびWindows Vista以降のバージョンのWindowsで、Process Monitorv3.2に置き換えられました。
ラッキー

6

lsofに相当するものの1つは、Sysinternalsのハンドルlistdllsからの出力を組み合わせることができます。

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

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

また、listdllhandleは連続したテーブルのような形式を生成しないため、ファイル名をフィルタリングすると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がこのファイルを開いていることがわかります。


5

Unlockerを試してください。

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


4
Unlockerは、ロックされたファイルのみを一覧表示し、開いているファイルは一覧表示しません。ほとんどのWindowsソフトウェアは、使用するDLLをロックしますが、ドキュメントはロックしません。
トビアス

5

ファイルが.dllの場合は、TaskListコマンドラインアプリを使用して、がファイルを開いたかを確認できます。

TaskList /M nameof.dll

3

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


1
私はここに来て、フォルダの削除を妨げている人を見つけて再起動を回避する方法を探しています。必要なコマンドには、再起動が必要な構成設定が必要であることがわかりました。なんて窓なんだ。
Gus

皆さん、openfilesコマンドの実行には長い時間がかかることに注意してください(4分程度)。
NH。

2

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

そこのSystemTools \ Shared Foldersの下に、「OpenFiles」があります。これはおそらくあなたが望むものに近いですが、ファイルがネットワーク共有上にある場合は、ファイルが存在するサーバー上で同じことを行う必要があります。


3
これは、他のネットワークユーザーによって開かれている共有ファイルのみを表示することに注意してください。ローカルシステムで開いているファイルを見つけるのに役立ちません。サーバー上でこれを行うと、ファイルを開いているユーザーはおそらくわかりますが、そのユーザーのマシン上のどのプログラムはわかりません。Process Explorer(@JayHofackerで言及されている)は私にとってうまく機能しました。
tomlogic 2012

2

Process Explorerを使用して、プロセスIDを見つけます。次に、Handleを使用して、開いているファイルを確認します。

例:ハンドル-p

Microsoft自体のユーティリティを使用しているので、このアプローチが好きです。


それらのソースコードがあれば
greywolf 2016年

2

OpenedFilesView、オプションメニューの下に、「ショーネットワークファイル」という名前のメニュー項目があります。おそらくそれが有効になっていると、前述のユーティリティはある程度役に立ちます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.