ฉันจะตรวจสอบได้อย่างไรว่าไฟล์ใดไฟล์หนึ่งเปิดอยู่ใน Windows? [ปิด]


87

หนึ่งในเครื่องมือโปรดของลินุกซ์คือlsof - มีดสวิสแท้!

วันนี้ฉันพบว่าตัวเองสงสัยว่าโปรแกรมใดในระบบ WinXP มีไฟล์เฉพาะเปิดอยู่ มียูทิลิตี้เทียบเท่ากับ lsof หรือไม่? นอกจากนี้ไฟล์ที่เป็นปัญหาอยู่บนเครือข่ายแชร์ดังนั้นฉันจึงไม่แน่ใจว่าจะมีความซับซ้อนหรือไม่

คำตอบ:


76

ใช้Process Explorerจาก Sysinternals Suite ฟังก์ชัน Find Handle หรือ DLL จะช่วยให้คุณค้นหากระบวนการโดยเปิดไฟล์นั้น


สิ่งนี้ตอบคำถามได้จริงหรือ? Process Explorer ช่วยให้คุณเห็นว่าไฟล์ใดที่เปิดอยู่สำหรับกระบวนการเฉพาะ / handle / dll / อะไรก็ตาม แต่นั่นคือการแม็ปย้อนกลับ ดูคำตอบของฉันstackoverflow.com/questions/15708/…สำหรับคำถามนี้
Greg Mattes

7
ใช่. คลิกที่ Find Handle หรือ Dll (หรือกด Ctrl-F) พิมพ์ชื่อไฟล์ที่คุณกำลังค้นหาและคุณจะพบกับรายการกระบวนการที่เปิดไฟล์นั้น
Jay Hofacker

ตอนนี้ Process Explorer ถูกเปลี่ยนชื่อและรวมเป็น "Process Monitor"
Matthew McCullough

7
@MatthewMcCullough อ้างอิงใด ๆ ? คุณไม่ถูกต้องProcess ExplorerและProcess Monitorเป็นสองยูทิลิตี้ที่แตกต่างกัน
Alois Mahdal

2
Process Explorer มีอินเทอร์เฟซบรรทัดคำสั่งหรือไม่
Anderson Green

41

สิ่งที่เทียบเท่าlsof -p pidคือเอาต์พุตรวมจากที่จับ sysinternals และ listdlls เช่น

handle -p pid
listdlls -p pid

คุณสามารถหา pid กับ pslistsysinternals


สิ่งนี้มาพร้อมกับการติดตั้ง windows มาตรฐานเช่น Windows 10 หรือไม่?
Morten

10

ลองจับ Filemon & Regmonยังยอดเยี่ยมสำหรับการพยายามคิดว่าโปรแกรม duce foo กำลังทำอะไรกับระบบของคุณ


ขณะนี้ @slipsec FileMon และ Regmon ถูกแทนที่ด้วยProcess Monitor v3.2 ใน Windows เวอร์ชันที่เริ่มต้นด้วย Windows 2000 SP4, Windows XP SP2, Windows Server 2003 SP1 และ Windows Vista
โชคดี

7

หนึ่งเทียบเท่าของlsofสามารถรวมเอาท์พุทจากหมายเลขอ้างอิงและlistdllsของ Sysinternals กล่าวคือ:

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

ขออภัยคุณต้อง "เรียกใช้ในฐานะผู้ดูแลระบบ" เพื่อให้สามารถใช้งานได้

นอกจากนี้listdllsและที่จับไม่ได้สร้างรูปแบบตารางต่อเนื่องดังนั้นการกรองชื่อไฟล์จะซ่อน 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 ที่ใช้ แต่ไม่ใช่เอกสารของคุณ
Tobias

5

หากไฟล์เป็น. dll คุณสามารถใช้แอพบรรทัดคำสั่งTaskListเพื่อดูว่าใครเปิดอยู่:

TaskList /M nameof.dll

3

มีโปรแกรม "OpenFiles" ดูเหมือนจะเป็นส่วนหนึ่งของ windows 7 ดูเหมือนว่ามันสามารถทำสิ่งที่คุณต้องการได้ สามารถแสดงรายการไฟล์ที่เปิดโดยผู้ใช้ระยะไกล (ผ่านการแชร์ไฟล์) และหลังจากเรียก "openfiles / Local on" และรีสตาร์ทระบบควรจะสามารถแสดงไฟล์ที่เปิดในเครื่องได้ หลังมีการกล่าวกันว่ามีบทลงโทษด้านประสิทธิภาพ


1
ฉันมาที่นี่เพื่อค้นหาวิธีค้นหาว่าใครกันที่ขัดขวางไม่ให้ฉันลบโฟลเดอร์และหลีกเลี่ยงการรีสตาร์ทและฉันพบว่าคำสั่งที่ฉันต้องการนั้นต้องการการตั้งค่าคอนฟิกที่ ... หน้าต่างมากแค่ไหน
กัส

ผู้คนโปรดทราบว่าคำสั่ง openfiles ใช้เวลานานในการรัน (ตามลำดับ 4 นาที)!
เอช.

2

หากคุณคลิกขวาที่ไอคอน "คอมพิวเตอร์" (หรือ "คอมพิวเตอร์ของฉัน") และเลือก "จัดการ" จากเมนูป๊อปอัปนั่นจะนำคุณไปยังคอนโซลการจัดการคอมพิวเตอร์

ในนั้นภายใต้ System Tools \ Shared Folders คุณจะพบ "Open Files" สิ่งนี้อาจใกล้เคียงกับที่คุณต้องการ แต่ถ้าไฟล์อยู่ในเครือข่ายแชร์คุณจะต้องทำสิ่งเดียวกันบนเซิร์ฟเวอร์ที่ไฟล์นั้นอยู่


3
โปรดทราบว่าจะแสดงเฉพาะไฟล์ที่แชร์ที่เปิดโดยผู้ใช้เครือข่ายอื่น ไม่ช่วยค้นหาไฟล์ที่เปิดอยู่ในระบบภายในเครื่อง การทำเช่นนี้บนเซิร์ฟเวอร์อาจบอกได้ว่าผู้ใช้รายใดเปิดไฟล์ไว้ แต่จะไม่ทราบว่าโปรแกรมใดบนเครื่องของผู้ใช้นั้น Process Explorer (ดังกล่าวโดย @JayHofacker) ทำงานได้ดีสำหรับฉัน
tomlogic

2

ใช้ Process Explorer เพื่อค้นหารหัสกระบวนการ จากนั้นใช้Handleเพื่อค้นหาไฟล์ที่เปิดอยู่

เช่นที่จับ -p

ฉันชอบแนวทางนี้เพราะคุณใช้ยูทิลิตี้จาก Microsoft เอง


ถ้าเรามีซอร์สโค้ดสำหรับสิ่งเหล่านั้น
graywolf

2

ในOpenedFilesViewภายใต้เมนูตัวเลือกจะมีรายการเมนูชื่อ "Show Network Files" บางทีเมื่อเปิดใช้งานยูทิลิตี้ดังกล่าวอาจมีประโยชน์บางอย่าง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.