จะปลดล็อกไฟล์โดยใช้ handle.exe และชื่อกระบวนการได้อย่างไร


8

ฉันลอง Unlocker 1.9.1 แต่มันไม่ทำงานอย่างถูกต้องสำหรับฉันบน Windows7 (ทำงานได้ดีบน Windows XP) และฉันลอง LockHunter 2.0.2.103 x64 และรายงานข้อผิดพลาด แต่ .... LockHunter ปลดล็อคไฟล์จริงจาก GUI แต่ ไม่ได้มาจากบรรทัดคำสั่ง

ดังนั้นฉันต้องการใช้ handle.exe โดยSysInternalsเพื่อปลดล็อกหนึ่งไฟล์ "TestPro.log" ฉันรู้เส้นทางสัมบูรณ์ถ้ามันช่วยได้ ฉันสามารถแสดงรายการและกระบวนการทั้งหมดที่ล็อคไฟล์โดยการดำเนินการ

C:\Windows\system32>c:\edutester\progs\handle testpro.log
java.exe           pid: 2120   type: File           338: C:\Users\Public\TestPro
\TestPro Automation Framework\Logs\TestPro.log
java.exe           pid: 1004   type: File           934: C:\Users\Public\TestPro
\TestPro Automation Framework\Logs\TestPro.log

สิ่งที่ฉันจำเป็นต้องรู้วิธีการปลดล็อคไฟล์โดยใช้ข้อมูลข้างต้นจากบรรทัดคำสั่งโดยอัตโนมัติ ไม่มีการแทรกแซงของผู้ใช้เป็นไปได้

  • Windows 7 64 บิต
  • Microsoft Windows [เวอร์ชั่น 6.1.7601]

คำตอบ:


8

คุณสามารถใช้handle.exeหนึ่งครั้งเพื่อแสดงรายการ PID และหมายเลขอ้างอิงจากนั้นอีกหลายครั้งเพื่อปิดแต่ละรายการ

ใช้for /fคำสั่งเพื่อวนซ้ำผลลัพธ์ของคำสั่งแรก ฉันไม่มีเครื่อง Windows ที่สะดวกในการทดสอบ แต่ควรมีลักษณะดังนี้:

จากแบตช์ไฟล์:

for /F "tokens=3,6 delims=: " %%I IN ('handle.exe -accepteula TestPro.log') DO handle.exe -c %%J -y -p %%I

จากบรรทัดคำสั่ง:

for /F "tokens=3,6 delims=: " %I IN ('handle.exe -accepteula TestPro.log') DO handle.exe -c %J -y -p %I

ฉันไม่สามารถทำงานได้ รหัสของคุณให้ฉัน('handle.exe was unexpected at this time.ฉันคิดว่ามีจะหายไปinก่อน('handle.exe was unexpected at this time.แต่แล้ว%%J contains : `จึงไม่โต้แย้งที่ถูกต้องสำหรับ Handle.exe
Radek

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

@ Radek ฉันอัพเดตคำตอบของฉันด้วยรหัสจริงที่ฉันใช้ ดูเหมือนว่าฉันได้%%Iและ%%Jผสมขึ้นและเราต้องลำไส้ใหญ่เป็นตัวคั่น ลองสิ่งนี้และดูว่ามันจะไปอย่างไร
Stephen Jennings

ทำงานได้ดี (ทั้งไฟล์แบตช์และเวอร์ชันบรรทัดคำสั่ง) หาก cmd เริ่มต้นเป็นผู้ดูแลระบบ ความคิดใด ๆ ที่ฉันสามารถทำให้มันทำงานเป็นส่วนหนึ่งของการทดสอบระบบอัตโนมัติข้ามคืนของฉันได้อย่างไร runasไม่ทำงานสำหรับฉันในกรณีนี้
Radek

ทำให้มันทำงานได้ เคล็ดลับคือคำสั่งให้ทำงานภายใต้ runas เป็นจริง cmd.exe และอาร์กิวเมนต์สำหรับ cmd เป็นรหัสของคุณ ฉันทำมันโดยไม่มีคำสั่ง
Radek

0

https://technet.microsoft.com/en-us/sysinternals/handle.aspx

การทดสอบและการแสดงผล:

for /f "tokens=3,6 skip=5 delims=: " %i in ('handle.exe -accepteula notepad.exe') do @echo %i %j                                                                    

ดำเนินการ:

for /f "tokens=3,6 skip=5 delims=: " %i in ('handle.exe -accepteula notepad.exe') do handle.exe -c %j -y -p %i  

ดำเนินการและ TASKKILL:

for /f "tokens=3,6 skip=5 delims=: " %i in ('handle.exe -accepteula notepad.exe') do handle.exe -c %j -y -p %i & taskkill /t /f /PID %i                                                       

1
คุณช่วยขยายเรื่องนี้และอธิบายวิธีปรับปรุงคำตอบที่ยอมรับ (สี่และครึ่งปี) ได้หรือไม่?
bertieb

ฉันเห็นว่าคำสั่งของคุณแตกต่างจากคำตอบที่ยอมรับดังนั้นจึงเป็นคำตอบที่ถูกกฎหมาย อย่างไรก็ตามตามที่ bertieb ระบุไว้คำตอบของคุณต้องการคำอธิบายว่าคำสั่งของคุณจะทำอะไรและพวกเขาตอบคำถาม OPs อย่างไร ขอบคุณสำหรับการสนับสนุน SuperUser
ฉันพูดว่า Reinstate Monica

0

การดำเนินการจากเมนูบริบทโดยไม่มีไฟล์ bat 1) วางไฟล์ handle64.exe ใน C: \ Windows 2) สร้างและดำเนินการสคริปต์ reg

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell\WhatBlockFile]
    "Icon"="C:\\ico\\Buttons\\Annotate_Help.ico"
    "MUIVerb"="Что блокирует?"
    "Position"="Top"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell\WhatBlockFile\command]
    @="C:\\Windows\\system32\\Cmd.exe /c C:\\Windows\\handle64.exe -u \"%1\" & pause"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.