Comment déverrouiller des fichiers en utilisant handle.exe et le nom du processus?

8

J'ai essayé Unlocker 1.9.1 mais cela ne fonctionne pas correctement pour moi sur Windows7 (fonctionnait bien sur Windows XP) et j'ai également essayé LockHunter 2.0.2.103 x64 et signalé un bug mais .... LockHunter déverrouille en fait le fichier de l'interface graphique mais pas à partir de la ligne de commande.

Je veux donc utiliser handle.exe par SysInternals pour déverrouiller un fichier "TestPro.log". Je connais le chemin absolu si ça aide. Je peux lister et tous les processus qui ont verrouillé le fichier en exécutant

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

Ce que je dois savoir pour déverrouiller le fichier en utilisant automatiquement les informations ci-dessus depuis la ligne de commande . Aucune intervention de l'utilisateur n'est possible.

  • Windows 7 64 bits
  • Microsoft Windows [version 6.1.7601]
Radek
la source

Réponses:

8

Vous pouvez utiliser handle.exeune fois pour répertorier les PID et les poignées, puis à nouveau plusieurs fois pour fermer chacun d'eux.

Utilisez la for /fcommande pour parcourir le résultat de la première commande. Je n'ai pas de machine Windows à portée de main, mais cela devrait ressembler à ceci:

A partir d'un fichier batch:

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

Depuis la ligne de commande:

for /F "tokens=3,6 delims=: " %I IN ('handle.exe -accepteula TestPro.log') DO handle.exe -c %J -y -p %I
Stephen Jennings
la source
Je ne peux pas le faire fonctionner. Votre code me donne ('handle.exe was unexpected at this time.je pense qu'il manque inavant ('handle.exe was unexpected at this time.Mais alors %%J contains : `donc ce n'est pas un argument valide pour handle.exe
Radek
Ouais, je me souviens avoir eu du mal à obtenir la commande exactement, mais je ne me souviens pas de ce que j'ai fait du haut de ma tête. J'essaie d'accéder à nouveau à mon fichier de commandes afin de pouvoir mettre à jour ma réponse avec la bonne syntaxe.
Stephen Jennings
@Radek J'ai mis à jour ma réponse avec le code que j'ai utilisé. On dirait que je suis arrivé %%Iet %%Jmélangés, et nous avons besoin du côlon comme séparateur. Essayez ceci et voyez comment ça se passe.
Stephen Jennings du
Fonctionne bien (à la fois les fichiers batch et les versions en ligne de commande) si cmd a démarré en tant qu'administrateur. Une idée de comment je peux le faire fonctionner dans le cadre de mes tests d'automatisation de nuit? runasne fonctionne pas pour moi dans ce cas.
Radek
Je l'ai fait fonctionner. L'astuce est que la commande à exécuter sous runas est en fait cmd.exe et l'argument pour cmd est votre code. Je le faisais sans cmd.
Radek
0

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

ESSAI ET AFFICHAGE:

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

EXÉCUTER:

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

EXÉCUTER ET TÂCHER:

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                                                       
Alexandre DEFRANCE
la source
1
Pouvez-vous développer cela et expliquer comment cela améliore la réponse acceptée ( vieille de quatre ans et demi) ?
bertieb
Je vois que vos commandes sont différentes de la réponse acceptée, c'est donc une réponse légitime. Cependant, comme l'a indiqué bertieb, votre réponse a besoin d' une explication sur ce que vos commandes feront et comment elles répondent à la question OP. Merci d'avoir contribué à SuperUser.
Je dis Reinstate Monica
0

Exécution à partir du menu contextuel sans fichier bat. 1) Placez le fichier handle64.exe dans C: \ Windows. 2) Créer et exécuter un script 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"
Garric
la source