สิ่งหนึ่งที่ทำให้ฉันรำคาญไม่สิ้นสุดเกี่ยวกับ Windows คือข้อผิดพลาดการละเมิดการแชร์แบบเก่า บ่อยครั้งคุณไม่สามารถระบุได้ว่ามีอะไรเปิดอยู่ โดยปกติแล้วจะเป็นเพียงตัวแก้ไขหรือนักสำรวจเพียงชี้ไปที่ไดเร็กทอรีที่เกี่ยวข้อง แต่บางครั้งฉันก็ต้องรีบู๊ตเครื่องใหม่

ข้อเสนอแนะใด ๆ เกี่ยวกับวิธีการค้นหาผู้กระทำผิด?

answer

ผมเคยประสบความสำเร็จกับSysinternals Process Explorer ด้วยวิธีนี้ คุณสามารถค้นหากระบวนการที่เปิดไฟล์ได้ และคุณสามารถใช้เพื่อปิดแฮนเดิลได้หากต้องการ แน่นอนว่าการปิดกระบวนการทั้งหมดจะปลอดภัยกว่า ใช้ความระมัดระวังและวิจารณญาณ

หากต้องการค้นหาไฟล์เฉพาะ ให้ใช้ตัวเลือกเมนูFind->Find Handle or DLL...พิมพ์ในส่วนของเส้นทางไปยังไฟล์ รายการกระบวนการจะปรากฏขึ้นด้านล่าง

หากคุณต้องการบรรทัดคำสั่ง ชุด Sysinternals จะมีเครื่องมือบรรทัดคำสั่งHandleซึ่งแสดงรายการแฮนเดิลที่เปิดอยู่

ตัวอย่าง

  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i "e:\"(ค้นหาไฟล์ทั้งหมดที่เปิดจากไดรฟ์e:\"
  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i "file-or-path-in-question"

คุณสามารถใช้ตรวจสอบทรัพยากรสำหรับเรื่องนี้ที่มาในตัวกับ Windows 7, 8, และ 10

  1. Open Resource Monitorซึ่งสามารถพบได้
    • โดยการค้นหาResource Monitorหรือresmon.exeในเมนูเริ่ม หรือ
    • เป็นปุ่มบนแท็บประสิทธิภาพในตัวจัดการงานของคุณ
  2. ไปที่แท็บCPU
  3. ใช้ช่องค้นหาในส่วนจัดการที่เกี่ยวข้อง
    • ดูลูกศรสีน้ำเงินในภาพหน้าจอด้านล่าง

เมื่อคุณพบแฮนเดิลแล้ว คุณสามารถระบุกระบวนการได้โดยดูที่คอลัมน์รูปภาพและ/หรือ PID

จากนั้น คุณสามารถลองปิดแอปพลิเคชันได้ตามปกติ หรือหากเป็นไปไม่ได้ ให้คลิกขวาที่ที่จับแล้วฆ่ากระบวนการโดยตรงจากที่นั่น ง่ายนิดเดียว!

ภาพหน้าจอของการตรวจสอบทรัพยากร

คัดลอกจากคำตอบเดิมของฉัน: https://superuser.com/a/643312/62

เพียงใช้มือจับปิดอย่างระมัดระวัง มันอันตรายกว่าที่คุณคิด เนื่องจากการจัดการรีไซเคิล - หากคุณปิดตัวจัดการไฟล์ และโปรแกรมเปิดอย่างอื่น ตัวจัดการไฟล์ดั้งเดิมที่คุณปิดอาจถูกนำมาใช้ซ้ำสำหรับ "อย่างอื่น" และตอนนี้ ให้เดาว่าจะเกิดอะไรขึ้นหากโปรแกรมทำงานต่อ โดยคิดว่ามันกำลังทำงานอยู่ในไฟล์ (ซึ่งคุณปิดตัวจัดการ) โดยที่อันที่จริงแล้วตัวจัดการไฟล์นั้นกำลังชี้ไปที่อย่างอื่น

ดูโพสต์ของ Raymond Chenในหัวข้อนี้

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.

ลองใช้คำสั่งopenfiles

คุณอาจต้องเปิดใช้งานรายการของไฟล์ที่เปิดอยู่ในopenfiles /local onเครื่องโดยการเรียกใช้และรีบูต

ฉันเคยใช้Handle with Success เพื่อค้นหากระบวนการดังกล่าวในอดีต

Lockhunter ( http://lockhunter.com/ ) ทำงานบนระบบ 32 และ 64 บิต

เพื่อชี้แจงให้ชัดเจน เป็นไปได้มากกว่าที่จะเป็นผลมาจากแอปของบุคคลที่สามที่ทำงานผิดปกติซึ่งไม่ได้ใช้การเรียกCreateFile API อย่างถูกต้องมากกว่าที่จะเป็นอะไรก็ได้ใน Windows อาจเป็นผลมาจากการออกแบบ CreateFile แต่ทำเสร็จแล้วและเราไม่สามารถย้อนกลับได้

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

ตอนนี้ ถ้า Explorer ดูเหมือนจะเป็นผู้ร้ายในที่นี้ อาจเป็นกรณีที่อยู่บนพื้นผิว และผู้กระทำผิดที่แท้จริงคือสิ่งที่ติดตั้งส่วนขยายของเชลล์ที่เปิดไฟล์ทั้งหมดในโฟลเดอร์เพื่อวัตถุประสงค์ของตัวเอง แต่ก็เป็นอย่างใดอย่างหนึ่งเช่นกัน กุงโฮทำอย่างนั้นหรือว่าทำความสะอาดตัวเองไม่ถูกวิธี Symantec AV เป็นสิ่งที่ฉันเคยเห็นการทำเช่นนี้มาก่อน และฉันจะไม่แปลกใจถ้าโปรแกรม AV อื่น ๆ จะถูกตำหนิด้วย ปลั๊กอินควบคุมแหล่งที่มาอาจมีข้อผิดพลาดเช่นกัน

ไม่ใช่คำตอบจริงๆ แต่เป็นเพียงคำแนะนำบางอย่างที่จะไม่ตำหนิ Windows เสมอไปสำหรับสิ่งที่อาจเป็นโปรแกรมของบุคคลที่สามที่เขียนไม่ดี (สิ่งที่สามารถเกิดขึ้นได้บนระบบปฏิบัติการอื่นที่มีการล็อกไฟล์โดยนัย แต่ระบบปฏิบัติการที่ใช้ยูนิกซ์ใด ๆ ได้แชร์การเข้าถึงโดย ค่าเริ่มต้น).

บนเซิร์ฟเวอร์ระยะไกล เมื่อคุณตรวจสอบการใช้เครือข่ายร่วมกัน สิ่งที่ง่ายอย่างคอนโซลการจัดการคอมพิวเตอร์สามารถแสดงข้อมูลนี้และปิดไฟล์ได้

Apropos Explorer เปิดไฟล์ค้างไว้: "เมื่อสิ่งนี้เกิดขึ้นกับไฟล์ที่คุณต้องการลบ คุณมีทางเลือกในการบังคับปิดที่จับหรือรีบูต"

คุณสามารถสิ้นสุด Explorer ได้

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

มิฉะนั้น ให้ฆ่ากระบวนการสำรวจเดสก์ท็อปและทำสิ่งที่คุณต้องการในขณะที่หายไป ขั้นแรกให้เริ่มสำเนาของ cmd.exe (คุณต้องมี UI เพื่อทำการล้างข้อมูลที่คุณต้องการ) ตรวจสอบให้แน่ใจว่าไม่มี Explorer ที่ไม่ใช่เดสก์ท็อปทำงานอยู่ จากนั้นฆ่า Explorer ล่าสุดด้วย เช่น Task Manager ทำสิ่งที่คุณต้องการในพรอมต์คำสั่ง สุดท้าย ให้เรียกใช้ Explorer จากพรอมต์คำสั่ง และจะกลายเป็นเดสก์ท็อป

ฉันเดาว่าอาจมีความไม่พึงพอใจหลงเหลืออยู่บ้างหากโปรแกรม systray บางโปรแกรมไม่สามารถจัดการกับการรีสตาร์ทเชลล์ได้

Who Lock Meทำงานได้ดีและทำให้ผู้คนขบขันกับชื่อ!

ไฟล์สามารถล็อคได้โดยกระบวนการในเครื่อง (ตัวปลดล็อคเป็นเครื่องมือที่ใช้) และโดยการเข้าถึงไฟล์ที่มาจากการแชร์

มีฟังก์ชันในตัวใน Windows ที่แสดงให้คุณเห็นว่าไฟล์ใดในเครื่องคอมพิวเตอร์ที่เปิด/ล็อกโดยคอมพิวเตอร์ระยะไกล (ซึ่งมีไฟล์เปิดผ่านการแชร์ไฟล์):

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

ที่นั่นคุณสามารถปิดไฟล์ได้อย่างเต็มที่

ด้วยProcess Hackerคุณสามารถระบุได้ว่ากระบวนการใดที่จัดเก็บไฟล์ของคุณได้อย่างง่ายดาย:

ค้นหา Handles หรือ DLLs

มีมุมมองไฟล์ที่เปิดอยู่ของ NirSoft ด้วยเช่นกัน

ภาพหน้าจอ

คำตอบ upvoted ข้างต้นครอบคลุมสถานการณ์ที่กระบวนการของโปรแกรมเปิดที่จับไฟล์ไว้ซึ่ง (โชคดี) เป็นเวลาส่วนใหญ่ - อย่างไรก็ตามในบางกรณี (ตามที่เกิดขึ้นกับระบบนี้ในขณะนี้) ระบบจะมีตัวจัดการไฟล์ เปิด.

คุณสามารถระบุสถานการณ์นี้ได้โดยทำตามคำแนะนำเพื่อค้นหากระบวนการจัดการไฟล์ด้วยตัวสำรวจกระบวนการด้านบน และสังเกตว่าชื่อกระบวนการถูกระบุว่าเป็น 'ระบบ' หรือปฏิบัติตามคำแนะนำโดยใช้การตรวจสอบทรัพยากร และสังเกตว่าไม่มีภาพปรากฏขึ้น การเปิด filehandle ในไฟล์ของคุณที่คุณสนใจ (แม้ว่าจะมีบางสิ่งที่ชัดเจนว่าคุณไม่สามารถแก้ไข/ลบไฟล์ ฯลฯ ได้)

หากเป็นเช่นนั้น ตัวเลือกของคุณ (เท่าที่ฉันทราบ) คือรีสตาร์ท หรือลืมดำเนินการใดๆ กับไฟล์นั้น

ฉันได้เปิดใช้Free Extended Task Managerโดยบล็อกของ Jeremy Zawodny มาระยะหนึ่งแล้ว และการติดตามข้อมูลเพิ่มเติมเกี่ยวกับกระบวนการก็ยอดเยี่ยมเช่นกัน +1 สำหรับ Process Explorer ด้านบนเช่นกัน โดยเฉพาะอย่างยิ่งสำหรับกระบวนการฆ่าที่ Task Manager มาตรฐานจะไม่สิ้นสุด

มีเครื่องมือ FILEMON และแสดงไฟล์ที่เปิดอยู่และหมายเลขอ้างอิง มันยากที่จะติดตามการแสดงผลหากคุณดูสด มันทำได้เร็วมาก แต่คุณสามารถหยุดไม่ให้แสดงสดได้ และคุณสามารถดูกิจกรรมที่เปิด/เขียนไฟล์ทั้งหมดได้ ตอนนี้เป็นของ Microsoft แต่เดิมคือ Sysinternals