[Func] SelfDelete

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
eln
Niveau 6
Niveau 6
Messages : 202
Enregistré le : sam. 28 juil. 2007 12:54
Status : Hors ligne

[Func] SelfDelete

#1

Message par eln »

Bonjour

Utilisateur du script SelfDelete découvert grâce à Tlem, je me suis aperçu qu'il ne remplissait pas ses fonctions dés qu'un utilisateur où le titre du script avait un accent. J'ai réussi à contourner ce problème avec quelques modifications.

Code original :

Code : Tout sélectionner

_SelfDelete()

Func _SelfDelete ( $iDelay = 0 )
Local $sCmdFile
FileDelete ( @TempDir & "\scratch.bat" )
$sCmdFile = 'ping - n ' & $iDelay & '127.0.0.1 > nul' & @CRLF _
& ':loop' & @CRLF _
& 'del "' & @ScriptFullPath & '"' & @CRLF _
& 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _
& 'del ' & @TempDir & '\scratch.bat'
FileWrite ( @TempDir & "\scratch.bat" , $sCmdFile )
Run ( @TempDir & "\scratch.bat" , @TempDir , @SW_HIDE )
EndFunc
Code modifié :

Code : Tout sélectionner

#include <Process.au3>  ;Commande _RunDOS

SelfDelete()

Func SelfDelete($iDelay = 0)
    _RunDOS("echo " & @ScriptFullPath & ">" & @TempDir & "\Chemin_Appli.txt")
    $Chemin_Appli = FileOpen(@TempDir & "\Chemin_Appli.txt", 0)
    Local $sCmdFile
    FileDelete(@TempDir & "\scratch.bat")
    $sCmdFile = 'ping -n ' & $iDelay & '127.0.0.1 > nul' & @CRLF _
             & ':loop' & @CRLF _
             & 'del "' & FileReadLine($Chemin_Appli, 1) & '"' & @CRLF _
             & 'if exist "' & FileReadLine($Chemin_Appli, 1) & '" goto loop' & @CRLF _
             & 'del ' & @TempDir & '\scratch.bat'
    FileWrite(@TempDir & "\scratch.bat", $sCmdFile)
    FileClose($Chemin_Appli)
    FileDelete(@TempDir & "\Chemin_Appli.txt")
    Run(@TempDir & "\scratch.bat", @TempDir, @SW_HIDE)
EndFunc   ;==>SelfDelete
Débutant, pas taper !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Ex] SelfDelete

#2

Message par Tlem »

eln a écrit :Utilisateur du script SelfDelete découvert grâce à Tlem
Merci.
eln a écrit :je me suis aperçu qu'il ne remplissait pas ses fonctions dés qu'un utilisateur où le titre du script avait un accent.
Autant pour moi, je n'avais pas pensé à ça.
Mais qu'a cela ne tienne ... Il suffit donc de récupérer le chemin + nom de fichier court.
Et pour cela, une fonction toute faite existe : FileGetShortName
Il suffit donc de modifier la fonction comme si dessous, pour que ca fonctionne :

Code : Tout sélectionner

Func _SelfDelete($iDelay = 0)
    Local $sCmdFile
    FileDelete(@TempDir & "\scratch.bat")
    $sCmdFile = 'ping - n ' & $iDelay & '127.0.0.1 > nul' & @CRLF _
             & ':loop' & @CRLF _
             & 'del "' & FileGetShortName (@ScriptFullPath) & '"' & @CRLF _
             & 'if exist "' & FileGetShortName (@ScriptFullPath) & '" goto loop' & @CRLF _
             & 'del ' & @TempDir & '\scratch.bat'
    FileWrite(@TempDir & "\scratch.bat", $sCmdFile)
    Run(@TempDir & "\scratch.bat", @TempDir, @SW_HIDE)
EndFunc
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Func] SelfDelete

#3

Message par Tlem »

Voici une version plus simple (origine du forum Allemand) proposée par SagePourpre, dont j'ai amélioré le fonctionnement pour prendre en charge le nom des fichiers long.

Code : Tout sélectionner

Func _SelfDelete ($num = 1)
    If @Compiled Then Exit ShellExecute ( @ComSpec , " /c ping 127.0.0.1 -n " & $num & " & DEL /F " & FileGetShortName(@ScriptName) , @ScriptDir , "open" , @SW_HIDE )
EndFunc
J'ai même profité pour rajouter le commutateur /F à la commande DEL car si le fichier est en lecture seul, il ne peut s'autodétruire. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [Func] SelfDelete

#4

Message par SagePourpre »

La fonction est même plus simple que les crédits qui l'accompagnent...

Tu sais, la fonction _SelfDelete provenant du forum allemand proposée en remplacement par SagePourpre que TLEM
a amélioré en y intégrant la prise en charge des noms de fichier longs.
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Avatar du membre
softwater
Niveau 3
Niveau 3
Messages : 44
Enregistré le : mer. 14 janv. 2009 17:12
Status : Hors ligne

Re: [Func] SelfDelete

#5

Message par softwater »

Bonjour,

J'ai testé avec succès la fonction _selfDelete(). Par contre je ne comprends pas à quoi sert le ping sur localhost?

Quelqu'un aurait-il l'amabilité de m'éclairer, d'autant que cela fonctionne aussi sans !
Merci.

Code : Tout sélectionner

Func _SelfDelete ()
    If @Compiled Then Exit ShellExecute ( @ComSpec , " /c DEL /F " & FileGetShortName(@ScriptName) , @ScriptDir , "open" , @SW_HIDE )
EndFunc
Avatar du membre
scorp84
Niveau 7
Niveau 7
Messages : 400
Enregistré le : mar. 04 nov. 2008 21:51
Localisation : Avignon, France
Status : Hors ligne

Re: [Func] SelfDelete

#6

Message par scorp84 »

Bonjour softwater,

Le ping permet de mettre une tempo paramétrable ($iDelay) avant d'exécuter la suite de la fonction.

Amicalement.

BM
Avatar du membre
softwater
Niveau 3
Niveau 3
Messages : 44
Enregistré le : mer. 14 janv. 2009 17:12
Status : Hors ligne

Re: [Func] SelfDelete

#7

Message par softwater »

Donc si j'ai bien compris ça fait un "Sleep" au niveau de la console DOS histoire que l'exe ait le temps de se fermer.
Merci pour la réponse.
Répondre