Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows Server

วิธีปลดล็อกไฟล์ที่ถูกล็อกโดย Process หรือ SYSTEM ใดๆ

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

แอปพลิเคชันหลายตัวเปิดไฟล์ในโหมด exclusive (독점) พร้อมกันระบบไฟล์จะล็อกไฟล์ป้องกันการดำเนินการ input-output จากแอปและกระบวนการอื่น หากปิดแอป ล็อกไฟล์จะถูกปลดปล่อย

ข้อความล็อกไฟล์อาจแตกต่างกัน ตัวอย่างหน้าจอด้านล่างแสดงประเภทไฟล์และแอปที่เกี่ยวข้อง:

File/Folder in Use. The action can't be completed because the file is open in another program. Close the folder or file and try again.

จากนั้นจึงเข้าใจง่ายว่าแอปใดล็อกไฟล์และปิดได้

อย่างไรก็ตาม บางครั้งอาจเห็นข้อความน่าสนใจกว่านั้น ว่าไฟล์ถูกใช้โดยกระบวนการที่ไม่รู้จักหรือกระบวนการระบบ Windows อาจเป็นกระบวนการ Windows หรือกระบวนการอื่นที่ทำงานด้วยสิทธิ์ System เช่น แอปแอนตี้ไวรัส เอเจนต์สำรองข้อมูล ฐานข้อมูล MSSQL ฯลฯ:

The action can't be completed because the file is open in SYSTEM. Close the file and try again.

มาลองค้นหาว่าโปรแกรม บริการ หรือกระบวนการระบบ Windows ใดใช้ไฟล์อยู่ วิธีปลดล็อกไฟล์ และว่าอาจปลดล็อกได้โดยไม่ต้องปิดกระบวนการหลักหรือไม่

หมายเหตุ. หากไม่สามารถลบโฟลเดอร์ในโฟลเดอร์แชร์เครือข่ายได้ ปัญหาอาจเกี่ยวข้องกับ thumbs.db ที่มีแคชภาพขนาดเล็กของไฟล์ในโฟลเดอร์ หรือไฟล์ถูกเปิด (ล็อก) โดยผู้ใช้อื่นบน SMB file server ของคุณ

วิธีง่ายที่สุดในการปลดล็อกไฟล์คือจบกระบวนการที่ล็อกไว้ แต่ไม่ทำได้ตลอดเวลา โดยเฉพาะบนเซิร์ฟเวอร์

เพื่อหากระบวนการที่ล็อกไฟล์ มักแนะนำให้ใช้เครื่องมือ Unlocker แต่ผมไม่ใช้ Unlocker เพราะไม่ให้ข้อมูลรายละเอียดเกี่ยวกับกระบวนการหรือโซ่กระบวนการที่ล็อกไฟล์ ไม่สามารถปลดล็อกไฟล์ที่ถูกใช้โดยกระบวนการได้ – ต้อง kill แอปทั้งหมด

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

เมื่อกระบวนการใน Windows เปิดไฟล์ File descriptor (handle) จะถูกกำหนดให้กับสตรีม input/output กระบวนการและกระบวนการลูกเข้าถึงไฟล์โดยใช้ handler ด้วย Windows API สามารถส่งสัญญาณให้ระบบไฟล์ปลดปล่อย file handle และปลดล็อกไฟล์ได้

คำเตือน. หากบังคับปิด file handles อาจทำให้แอปหรือคอมพิวเตอร์ทำงานไม่เสถียร หากไม่แน่ใจว่าจะเกิดอะไรขึ้นหลังปิด file handle ของแอป อย่าทำบน Production server เว้นแต่ทดสอบล่วงหน้าแล้ว

วิธีปลดล็อกไฟล์ด้วย Process Explorer

ProcessExplorer เป็นเครื่องมือฟรีจากชุด Sysinternals ดาวน์โหลดได้จากเว็บไซต์ Microsoft (https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer) มาลองหากระบวนการที่ล็อกไฟล์และปลดล็อกไฟล์โดยการรีเซ็ต file handle ของกระบวนการ

  1. ไม่ต้องติดตั้ง ProcessExplorer: เพียงดาวน์โหลด แตกไฟล์ และรัน procexp.exe เป็น Administrator
  2. เลือก Find → Find Handle or DLL (หรือกด Ctrl-F)
  3. ระบุชื่อไฟล์ที่ต้องการปลดล็อก และกด Search
  4. เลือกไฟล์ที่ต้องการ กระบวนการที่เปิดไฟล์จะถูกไฮไลท์ในต้นไม้กระบวนการ คลิกขวาและเลือก Kill Process Tree เพื่อจบกระบวนการ อย่างไรก็ตาม สามารถลองปิด file handle โดยไม่จบกระบวนการได้ File handle ที่ค้นหาจะถูกไฮไลท์อัตโนมัติในแป้นล่างของ Process Explorer คลิกขวาที่ handle และเลือก Close handle ยืนยันการปิดไฟล์
หากแป้นล่างที่มีรายการ open process handles ไม่แสดงใน Process Explorer ของคุณ ให้เปิดใช้งานตัวเลือก View → Lower Pane View → Handles

ดังนั้นคุณปิด file handle แล้วโดยไม่จบกระบวนการหลัก แล้วคุณสามารถลบหรือเปลี่ยนชื่อไฟล์ได้

วิธีปลดล็อก File Handle ด้วยเครื่องมือ Handle

Handle เป็นเครื่องมือคำสั่งบรรทัดอีกตัวจาก Sysinternals (ดาวน์โหลดได้ที่ Microsoft website: https://docs.microsoft.com/en-us/sysinternals/downloads/handle) อนุญาตให้หากระบวนการที่ล็อกไฟล์ของคุณและปลดล็อกโดยการปลดปล่อย handle

  1. ดาวน์โหลดและแตกไฟล์ Handle archive
  2. เปิด Command Prompt เป็น Administrator และรันคำสั่ง: handle64.exe > listproc.txt
  3. คำสั่งนี้จะบันทึกรายการ open handles ลงไฟล์ txt สามารถแสดง handles สำหรับไดเรกทอรีที่ไฟล์ที่ต้องการเปลี่ยนอยู่: Handle64.exe -a "C:\Program Files\App" หรือสำหรับกระบวนการเฉพาะ: handle64.exe -p excel.exe
  4. เปิด listproc.txt ใน Text Editor ใดๆ และหาบรรทัดที่มีชื่อไฟล์ที่ถูกล็อก คัดลอก ID ของ file handle (ในรูปแบบ hex) จากนั้นไปที่ส่วนที่แสดงกระบวนการที่เป็นเจ้าของ handle และบันทึก PID ของมัน น่าจะเป็นไปได้มากที่กระบวนการที่รันเป็น System จะมี PID 4
สำหรับกระบวนการระบบ Windows บางตัว handle.exe คืนค่าข้อความ: wininit.exe pid: 732 <unable to open process> หมายความว่าไม่สามารถรับข้อมูลเกี่ยวกับกระบวนการระบบเหล่านี้ได้ (แม้จะเป็น Administrator) เพื่อรับ file handles ที่เปิดโดยกระบวนการดังกล่าว ให้รัน cmd.exe เป็น System และลองดูรายการ handles อีกครั้ง
  1. กลับไปที่ Command Prompt และรีเซ็ต file handle โดย HandleID และ ProcessID รูปแบบคำสั่ง: handl64e.exe -c HandleID -p ProcessID ตัวอย่าง: handl64e.exe -c 18C -p 18800
  2. เครื่องมือจะขอให้ยืนยันการปิดไฟล์สำหรับกระบวนการ ยืนยันโดยกด y → enter

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