Một điều khiến tôi khó chịu về Windows là lỗi vi phạm chia sẻ. Thường thì bạn không thể xác định điều gì đang giữ nó mở. Thông thường nó chỉ là một trình soạn thảo hoặc trình thám hiểm chỉ trỏ đến một thư mục có liên quan nhưng đôi khi tôi phải dùng đến việc khởi động lại máy của mình.

Bất kỳ đề xuất về cách tìm ra thủ phạm?

answer

Tôi đã thành công với Sysinternals Process Explorer . Với điều này, bạn có thể tìm kiếm để tìm (các) quy trình nào đang mở tệp và bạn có thể sử dụng nó để đóng (các) xử lý nếu muốn. Tất nhiên, sẽ an toàn hơn nếu bạn đóng toàn bộ quá trình. Hãy thận trọng và phán đoán.

Để tìm một tệp cụ thể, hãy sử dụng tùy chọn menu Find->Find Handle or DLL...Nhập một phần của đường dẫn đến tệp. Danh sách các quy trình sẽ xuất hiện bên dưới.

Nếu bạn thích dòng lệnh, bộ Sysinternals bao gồm công cụ dòng lệnh Handle , liệt kê các chốt đang mở.

Các ví dụ

  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i "e:\"(tìm tất cả các tệp được mở từ ổ đĩa e:\"
  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i "file-or-path-in-question"

Bạn có thể sử dụng Resource Monitor cho việc này được tích hợp sẵn với Windows 7, 8 và 10.

  1. Mở màn hình tài nguyên , có thể được tìm thấy
    • Bằng cách tìm kiếm Resource Monitor hoặc resmon.exe trong menu bắt đầu, hoặc
    • Dưới dạng một nút trên tab Hiệu suất trong Trình quản lý tác vụ của bạn
  2. Chuyển đến tab CPU
  3. Sử dụng các lĩnh vực tìm kiếm trong Handles Associated phần
    • Xem mũi tên màu xanh lam trong ảnh chụp màn hình bên dưới

Khi bạn đã tìm thấy điểm xử lý, bạn có thể xác định quy trình bằng cách xem cột Hình ảnh và / hoặc PID.

Sau đó, bạn có thể thử đóng ứng dụng như bình thường hoặc nếu không thể, chỉ cần nhấp chuột phải vào phần điều khiển và kết thúc quá trình trực tiếp từ đó. Dễ như ăn bánh!

Ảnh chụp màn hình Resource Monitor

Được sao chép từ câu trả lời gốc của tôi: https://superuser.com/a/643312/62

Chỉ cần rất cẩn thận với tay cầm đóng; nó thậm chí còn nguy hiểm hơn bạn nghĩ, vì xử lý tái chế - nếu bạn đóng xử lý tệp và chương trình mở thứ khác, thì xử lý tệp ban đầu mà bạn đã đóng có thể được sử dụng lại cho "thứ khác". Và bây giờ hãy đoán xem điều gì sẽ xảy ra nếu chương trình tiếp tục, nghĩ rằng nó đang hoạt động trên tệp (mà bạn đã đóng chốt điều khiển), trong khi thực tế thì xử lý tệp đó đang trỏ đến một thứ khác.

xem bài đăng của Raymond Chen về chủ đề này

Suppose a search index service has a file open for indexing but has gotten stuck temporarily and you want to delete the file, so you (unwisely) force the handle closed. The search index service opens its log file in order to record some information, and the handle to the deleted file is recycled as the handle to the log file. The stuck operation finally completes, and the search index service finally gets around to closing that handle it had open, but it ends up unwittingly closing the log file handle.

The search index service opens another file, say a configuration file for writing so it can update some persistent state. The handle for the log file gets recycled as the handle for the configuration file. The search index service wants to log some information, so it writes to its log file. Unfortunately, the log file handle was closed and the handle reused for its configuration file. The logged information goes into the configuration file, corrupting it.

Meanwhile, another handle you forced closed was reused as a mutex handle, which is used to help prevent data from being corrupted. When the original file handle is closed, the mutex handle is closed and the protections against data corruption are lost. The longer the service runs, the more corrupted its indexes become. Eventually, somebody notices the index is returning incorrect results. And when you try to restart the service, it fails because its configuration files have been corrupted.

You report the problem to the company that makes the search index service and they determine that the index has been corrupted, the log file has mysteriously stopped logging, and the configuration file was overwritten with garbage. Some poor technician is assigned the hopeless task of figuring out why the service corrupts its indexes and configuration files, unaware that the source of the corruption is that you forced a handle closed.

Hãy thử lệnh openfiles .

Bạn có thể phải bật danh sách các tệp đã mở cục bộ bằng cách chạy openfiles /local onvà khởi động lại.

Tôi đã sử dụng Xử lý thành công để tìm các quy trình như vậy trong quá khứ.

Lockhunter ( http://lockhunter.com/ ) hoạt động trên hệ thống 32 và 64bit.

Chỉ cần làm rõ, điều này có nhiều khả năng là do các ứng dụng của bên thứ 3 hoạt động sai không sử dụng lệnh gọi API CreateFile một cách chính xác hơn là bất kỳ thứ gì trong chính Windows. Có lẽ đó là hệ quả của việc thiết kế CreateFile, nhưng làm xong là xong và chúng ta không thể quay lại.

Về cơ bản, khi mở một tệp trong chương trình Windows, bạn có tùy chọn chỉ định một cờ cho phép truy cập được chia sẻ. Nếu bạn không chỉ định cờ, chương trình sẽ có quyền truy cập độc quyền vào tệp.

Bây giờ, nếu Explorer có vẻ là thủ phạm ở đây, thì có thể đó chỉ là bề ngoài và thủ phạm thực sự là thứ cài đặt một phần mở rộng shell mở tất cả các tệp trong một thư mục cho mục đích riêng của nó nhưng cũng có thể gung-ho khi làm như vậy, hoặc việc đó không tự dọn dẹp đúng cách. Symantec AV là thứ mà tôi đã thấy làm điều này trước đây, và tôi sẽ không ngạc nhiên nếu các chương trình AV khác cũng bị đổ lỗi. Trình cắm điều khiển nguồn cũng có thể bị lỗi.

Vì vậy, không thực sự là một câu trả lời, mà chỉ là một số lời khuyên để không phải lúc nào cũng đổ lỗi cho Windows vì những gì có thể là một chương trình của bên thứ ba được viết không tốt (điều gì đó cũng có thể xảy ra trên bất kỳ hệ điều hành nào khác có khóa tệp ngầm, nhưng bất kỳ hệ điều hành dựa trên unix nào đã chia sẻ quyền truy cập bằng vỡ nợ).

Trên máy chủ từ xa, khi bạn đang kiểm tra chia sẻ mạng, một thứ đơn giản như Bảng điều khiển quản lý máy tính có thể hiển thị thông tin này và đóng tệp.

Apropos Explorer đang giữ một tệp đang mở: "Khi điều này xảy ra trên tệp bạn cần xóa, bạn có lựa chọn buộc đóng tay cầm hoặc khởi động lại."

Bạn chỉ có thể kết thúc Explorer.

Nếu đây là việc chỉ xảy ra một lần (Explorer thường không mở tệp này) thì tôi đoán việc đăng xuất và đăng nhập lại sẽ thực hiện thủ thuật.

Nếu không, hãy giết tiến trình Explorer trên máy tính để bàn và làm những gì bạn muốn trong khi nó biến mất. Trước tiên, hãy bắt đầu một bản sao của cmd.exe (bạn cần một giao diện người dùng để thực hiện công việc dọn dẹp dự định của mình). Đảm bảo rằng không có Trình thám hiểm không phải máy tính để bàn đang chạy. Sau đó, giết Explorer cuối cùng bằng Trình quản lý tác vụ. Làm những gì bạn muốn trong dấu nhắc lệnh. Cuối cùng, chạy Explorer từ dấu nhắc lệnh và nó sẽ trở thành màn hình nền.

Tôi đoán có thể có một số khó chịu còn sót lại nếu một số chương trình systray không thể đối phó với việc khởi động lại shell.

Who Lock Me hoạt động tốt và khiến mọi người thích thú với cái tên!

Các tệp có thể bị khóa bởi các quy trình cục bộ (trình mở khóa là công cụ để sử dụng) và bằng quyền truy cập tệp đến thông qua chia sẻ.

Có một chức năng tích hợp trong Windows cho bạn biết những tệp nào trên máy tính cục bộ được mở / khóa bởi máy tính từ xa (có tệp được mở thông qua chia sẻ tệp):

* Select "Manage Computer" (Open "Computer Management")
* click "Shared Folders"
* choose "Open Files"

Ở đó, bạn thậm chí có thể đóng tệp một cách mạnh mẽ.

Với Process Hacker, bạn có thể dễ dàng xác định những quy trình nào đang giữ tệp của bạn:

Tìm Xử lý hoặc DLL

Có cả Chế độ xem tệp đã mở của NirSoft .

Ảnh chụp màn hình

Các câu trả lời được ủng hộ ở trên đề cập đến các tình huống trong đó quá trình chương trình đang giữ tệp xử lý mở, điều này (may mắn thay) là hầu hết thời gian - tuy nhiên trong một số trường hợp (như đang xảy ra trên hệ thống này vào lúc này), hệ thống tự giữ một tệp xử lý mở ra.

Bạn có thể xác định tình huống này bằng cách làm theo các hướng dẫn để tìm quy trình giữ xử lý tệp với trình khám phá quy trình ở trên và lưu ý rằng tên quy trình được liệt kê là 'hệ thống' hoặc bằng cách làm theo hướng dẫn sử dụng trình giám sát tài nguyên và lưu ý rằng không có hình ảnh nào được hiển thị có một trình xử lý tệp đang mở trên tệp mà bạn quan tâm (Mặc dù rõ ràng là có điều gì đó làm bạn không thể chỉnh sửa / xóa, v.v. tệp đó).

Nếu điều đó xảy ra, tùy chọn của bạn (theo như tôi biết) là khởi động lại - hoặc quên việc thực hiện bất kỳ điều gì với tệp đó.

Tôi đã bật Trình quản lý tác vụ mở rộng miễn phí một thời gian trước bởi blog của Jeremy Zawodny và nó cũng rất tuyệt để theo dõi thêm thông tin về các quy trình. +1 cho Process Explorer như trên, đặc biệt là để giết các quy trình mà Trình quản lý tác vụ tiêu chuẩn sẽ không kết thúc.

Có một công cụ FILEMON và hiển thị các tệp và xử lý đang mở. Thật khó để theo kịp màn hình của nó nếu bạn xem trực tiếp, nó hoạt động rất nhanh. Nhưng bạn có thể ngăn nó hiển thị trực tiếp và bạn có thể xem tất cả hoạt động mở / ghi tệp. Hiện thuộc sở hữu của Microsoft nhưng ban đầu thuộc Sysinternals