Làm cách nào để xác định xem một tệp cụ thể có đang mở trong Windows hay không? [đóng cửa]


87

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 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 nào tương đương với lsof không? Ngoài ra, tệp được đề cập đã được chia sẻ qua mạng nên tôi không chắc liệu điều đó có phức tạp hóa vấn đề hay không.

Câu trả lời:


74

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 khi mở tệp đó.


Điều này thực sự trả lời câu hỏi? Process Explorer cho phép bạn xem tệp nào đang mở cho một quy trình cụ thể / handle / dll / anything, 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

6
Đúng vậy. Nhấp vào Find Handle hoặc Dll (hoặc nhấn Ctrl-F), nhập tên của tệp bạn đang tìm kiếm và bạn sẽ thấy danh sách các quy trình mở tệp đó.
Jay Hofacker 10/10/08

Process Explorer hiện đã được đổi tên và đóng gói thành "Process Monitor".
Matthew McCullough

7
@MatthewMcCullough Có tài liệu tham khảo nào không? Bạn không chính xác, Process ExplorerProcess Monitor là hai tiện ích khác nhau.
Alois Mahdal

2
Process Explorer có giao diện dòng lệnh không?
Anderson Green

40

Tương đương với lsof -p pidlà kết quả đầu ra kết hợp từ xử lý sysinternals và listdlls, tức là

handle -p pid
listdlls -p pid

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


Điều này có đi kèm với cài đặt cửa sổ tiêu chuẩn như Windows 10 không?
Morten

10

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


@slipsec FileMon và Regmon hiện được thay thế bằng Process Monitor v3.2 trên các phiên bản Windows bắt đầu từ Windows 2000 SP4, Windows XP SP2, Windows Server 2003 SP1 và Windows Vista.
May mắn

6

Một tương đương của lsof có thể được kết hợp đầu ra từ xử lýlistdlls của Sysinternals , tức là:

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 Quản trị viên" để có thể sử dụng chúng.

Ngoài ra listdllsxử lý không tạo ra dạng bảng liên tục vì vậy việc lọc tên tệp sẽ ẩn PID. findstr /c:pid: /c:<filename>Tuy nhiên, sẽ giúp bạn rất gần với cả hai tiện ích

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 rằng gvim.exe là tệp đang mở tệp này.


5

Hãy thử Unlocker .

Trang web Unlocker có một biểu đồ tiện lợi (cuộn xuống sau khi theo liên kết) hiển thị so sánh với các công cụ khác. Rõ ràng là nhữ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 ít nhất biểu đồ cũng liệt kê các lựa chọn thay thế để bạn có thể tự mình thử.


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

5

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

TaskList /M nameof.dll

3

Có một chương trình "OpenFiles", dường như là một phần của windows 7. Có vẻ như nó có thể làm những gì bạn muốn. Nó có thể liệt kê các tệp được người dùng từ xa mở (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.


1
Tôi đến đây để tìm cách tìm ra ai đang ngăn tôi xóa một 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 nó .... yêu cầu khởi động lại. Làm thế nào rất rất cửa sổ.
Gus

mọi người, hãy lưu ý rằng lệnh openfiles mất một khoảng thời gian DÀI để chạy (theo thứ tự 4 phút)!
NH.

2

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ừ menu 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 Công cụ hệ thống \ Thư mục được chia sẻ, bạn sẽ tìm thấy "Mở tệp". Điều này có thể gần với những gì bạn muốn, nhưng nếu tệp nằm trên một mạng chia sẻ thì bạn cần thực hiện điều tương tự trên máy chủ mà tệp đang tồn tại.


3
Lưu ý rằng điều này chỉ hiển thị các tệp được chia sẻ được mở bởi những người dùng mạng khác. Nó không giúp tìm các tệp đang mở trên hệ thống cục bộ. Thực hiện việc 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 phải chương trình nào trên máy của người dùng đó. Process Explorer (như được đề cập bởi @JayHofacker) đã hoạt động tốt đối với tôi.
tomlogic

2

Sử dụng Process Explorer để tìm id quy trình. Sau đó, sử dụng Xử lý để tìm ra tệp nào đang mở.

Ví dụ: xử lý -p

Tôi thích cách tiếp cận này vì bạn đang sử dụng các tiện ích từ chính Microsoft.


nếu chỉ có chúng tôi đã có mã nguồn cho những
graywolf

2

Trong OpenedFilesView , dưới menu Tùy chọn, có một mục menu có tên "Hiển thị Tệp Mạng". Có lẽ với việc được kích hoạt, tiện ích nói trên sẽ có ích.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.