Câu hỏi Làm cách nào để xác định xem một tệp cụ thể có đang mở trong Windows không? [đã đóng]


Một trong những công cụ yêu thích của tôi cho Linux là lsof - một con dao quân đội Thụy Sĩ thực sự!

Hôm nay tôi thấy mình tự hỏi chương trình nào trên hệ thống WinXP có một tệp cụ thể đang mở. Có tiện ích tương đương nào cho lsof không? Ngoài ra, các tập tin trong câu hỏi đã qua một mạng chia sẻ vì vậy tôi không chắc chắn nếu điều đó phức tạp vấn đề.


76
2017-08-19 04:37


gốc




Các câu trả lời:


Sử dụng Process Explorer từ Sysinternals Suite, chức năng Find Handle hoặc DLL sẽ cho phép bạn tìm kiếm quá trình với tập tin đó đang mở.


61
2017-08-19 04:48



Điều này thực sự trả lời câu hỏi? Process Explorer cho phép bạn xem các tệp nào đang mở cho một quy trình / xử lý / dll / bất cứ điều gì cụ thể, nhưng đó là ánh xạ ngược. Xem câu trả lời của tôi stackoverflow.com/questions/15708/… cho câu hỏi này. - Greg Mattes
Có nó. Nhấp vào Find Handle hoặc Dll (hoặc nhấn Ctrl-F), gõ vào tên của tập tin bạn đang tìm kiếm, và bạn kết thúc với một danh sách các quá trình với tập tin đó đang mở. - Jay Hofacker
Process Explorer hiện đã được đổi tên và đóng gói thành "Process Monitor". - Matthew McCullough
@MatthewMcCullough Bất kỳ tài liệu tham khảo? Bạn không chính xác, Process Explorer và Process Monitor là hai tiện ích khác nhau. - Alois Mahdal
Process Explorer có giao diện dòng lệnh không? - Anderson Green


Tương đương với lsof -p pid là kết quả đầu ra từ sysinternals handle và listdlls, tức là

handle -p pid
listdlls -p pid

bạn có thể tìm ra pid với sysinternals pslist.


36
2018-03-01 04:48





Thử Xử lý. Filemon & Regmon cũng rất tuyệt vời khi cố gắng tìm ra những gì chương trình duce foo đang làm cho hệ thống của bạn.


8
2017-08-19 04:46



Đã cố gắng và thích Xử lý. Cảm ơn. - Batandwa
@slipsec FileMon và Regmon giờ đây được thay thế bằng Process Monitor v3.2  trên các phiên bản Windows bắt đầu với Windows 2000 SP4, Windows XP SP2, Windows Server 2003 SP1 và Windows Vista. - Lucky


Thử Trình mở khóa.

Các trang web Unlocker có một biểu đồ tiện lợi (di chuyển xuống sau khi theo liên kết) cho thấy một so sánh với các công cụ khác. Rõ ràng so sánh như vậy thường thiên vị vì chúng thường được viết bởi tác giả công cụ, nhưng biểu đồ ít nhất liệt kê các lựa chọn thay thế để bạn có thể thử chúng cho chính mình.


5
2017-10-09 17:35



Unlocker chỉ liệt kê các tập tin bị khóa, không mở các tập tin. Hầu hết các phần mềm Windows đều khóa DLL mà nó sử dụng chứ không phải tài liệu của bạn. - Tobias


Nếu tệp là .dll thì bạn có thể sử dụng Danh sach cong viec ứng dụng dòng lệnh để xem ứng dụng đã mở nó:

TaskList /M nameof.dll

5
2018-04-08 18:03





Một tương đương với lsof có thể được kết hợp đầu ra từ Sysinternals ' xử lý và listdlls, I E.:

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

Thật không may, bạn phải "chạy với tư cách là Quản trị viên" để có thể sử dụng chúng.

Cũng thế listdlls và xử lý không tạo ra biểu mẫu dạng bảng liên tục để lọc tên tệp sẽ ẩn PID. findstr /c:pid: /c:<filename> nên giúp bạn rất gần với cả hai tiện ích, mặc dù

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
[...]

Ở đây chúng ta có thể thấy gvim.exe là tệp có tệp này đang mở.


5
2018-03-21 10:36





Nếu bạn nhấp chuột phải vào biểu tượng "Máy tính" (hoặc "Máy tính của tôi") và chọn "Quản lý" từ trình đơn bật lên, điều đó sẽ đưa bạn đến bảng điều khiển Quản lý máy tính.

Trong đó, trong System Tools \ Shared Folders, bạn sẽ tìm thấy "Open Files". Đây có lẽ là gần với những gì bạn muốn, nhưng nếu tập tin trên một mạng chia sẻ thì bạn cần phải làm điều tương tự trên máy chủ mà trên đó các tập tin sống.


4
2017-08-19 04:40



Lưu ý rằng điều này chỉ hiển thị các tệp được chia sẻ được mở bởi người dùng mạng khác. Nó không giúp tìm các tệp được mở trên hệ thống cục bộ. Làm điều này trên máy chủ có thể sẽ cho bạn biết người dùng nào đã mở tệp nhưng không có chương trình nào trên máy của người dùng đó. Process Explorer (như đã đề cập bởi @JayHofacker) đã làm việc tốt cho tôi. - tomlogic


Có một chương trình "OpenFiles", có vẻ là một phần của windows 7. Dường như nó có thể làm những gì bạn muốn. Nó có thể liệt kê các tệp được mở bởi người dùng từ xa (thông qua chia sẻ tệp) và sau khi gọi "openfiles / Local on" và khởi động lại hệ thống, nó sẽ có thể hiển thị các tệp được mở cục bộ. Sau này được cho là có hình phạt hiệu suất.


3
2018-05-09 15:24



Tôi đến đây tìm cách tìm ra ai đang ngăn cản tôi xóa thư mục và tránh khởi động lại, và tôi thấy lệnh tôi cần yêu cầu thiết lập cấu hình ... bạn đoán là .... yêu cầu khởi động lại. Làm thế nào rất rất cửa sổ. - Gus