Page 1 sur 1
[..] verrou sur un fichier impossible de le supprimer
Posté : mar. 02 nov. 2010 14:47
par vincentr
Bonjour,
Je souhaite supprimer un répertoire mais un process utilise une dll se trouvant dans ce répertoire.
Je souhaiterais automatiser le kill de ce process afin de pouvoir supprimer mon répertoire.
Je ne sais pas par quel bout attaquer.
J'ai essayé d'utiliser les utilitaires DOS Listdlls et Handle mais je galère pas mal.
Pourriez vous m'aider ?
Re: [..] verrou sur un fichier impossible de le supprimer
Posté : mar. 02 nov. 2010 21:50
par vincentr
Voici mon début de code
► Afficher le texte
Code : Tout sélectionner
#include <Constants.au3>
#include <String.au3>
#include <Array.au3>
Local $foo = Run(@ComSpec & " /c listdlls -r -d C:\WINDOWS\system32\Secur32.dll", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
Local $line
While 1
$line = StdoutRead($foo)
If @error Then ExitLoop
If StringInStr($line, "pid:") Then ConsoleWrite(StringReplace(StringTrimLeft($line, 130), "-", ""))
ConsoleWrite($line)
Wend
Mon problème est la mise en forme car je dois par la suite récupérer le PID pour faire un ProcessClose.
Je suis prêt à partir sur tout autre chose ?
Re: [..] verrou sur un fichier impossible de le supprimer
Posté : mar. 02 nov. 2010 21:52
par Tlem
Quel est le processus qui utilise la fameuse DLL.
ET puis quelle est cette DLL ?
Re: [..] verrou sur un fichier impossible de le supprimer
Posté : mer. 03 nov. 2010 08:06
par sksbir
Bonjour
J'ai eu le même soucis, et j'en ai parlé ici :
[R]Détecter les process qui lockent un fichier
Pour le coup, je t'ai rajouté le code du petit script que j'ai écris pour l'occasion.
L'astuce d'analyse du résultat de handle consiste à exploiter le fait que le processID se trouve dans la 1ere ligne après la séparation dans le résultat.
Si tu mets un nom de répertoire il devrait tuer tous les process liés à ce répertoire.
j'ai rajouté une vérification de l'existence du fichier ou de la cible au début, parce que sans cette protection , appeler le script avec l'argument "exe" par exemple, te mettrais ta machine en vrac.
[R] verrou sur un fichier impossible de le supprimer
Posté : jeu. 04 nov. 2010 15:29
par vincentr
Voici le script que j'ai préparé. Au cas où.
► Afficher le texte
Dim $list_dll = @TempDir & "\Listdlls.txt"
Dim $PID
Dim $line
Dim $Fichier = "C:\oracle\ora81\bin\oci.dll"
RegWrite("HKCU\Software\Sysinternals\ListDLLs", "EulaAccepted", "REG_DWORD", "1")
FileInstall(".\listdlls.exe", @TempDir & "\",1)
RunAsWait("admin", @ComputerName, "password", 0, @ComSpec & " /c " & @TempDir & "\listdlls -r -d " & $Fichier & " >" & $list_dll, @SystemDir, @SW_HIDE)
$file = FileOpen($list_dll, 0)
If $file = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
If StringInStr($line, "pid:") <> "0" Then $PID = StringMid($line, StringInStr($line, "pid:") + 5, 5)
ProcessClose($PID)
WEnd
FileDelete($Fichier)
FileClose($file)
Re: [R] verrou sur un fichier impossible de le supprimer
Posté : ven. 05 nov. 2010 10:09
par sksbir
vincentr a écrit :Voici le script que j'ai préparé. Au cas où......
Le problème n'est pas résolu ?
Le script que j'ai publié correspond pourtant exactement à ce que tu veux : il suffit de le lancer avec le nom complet du répertoire que tu veux supprimer, le script se chargera de tuer le ou les processus concernés si ils existent. Tu peux ensuite supprimer effectivement le répertoire...