Page 1 sur 1

[R] Suppression automatique d'un script.au3 quand il quitte

Posté : jeu. 27 oct. 2011 11:35
par XenaMelody
Bonjour !

J'ai un autre problème. Comment faire pour qu'un script se supprime automatiquement sans qu'un autre script qui s'en charge ?
J'ai essayer FileDelete(@ScriptFullPath) mais ça ne marche pas. Suis-je obligé d'utiliser une ressource externe, un autre script ? Et si oui, comment faire pour savoir si ce dernier a fini ( dans tout types de script : script ne faisant pas appelle à une fenêtre, plusieurs scripts lancés en même temps )

Merci d'avance !

Re: [..] Suppression automatique d'un script.au3 quand il qu

Posté : jeu. 27 oct. 2011 11:44
par sylvanie
Bonjour, on a deux exple de fonctions "suicide" ici
viewtopic.php?f=3&t=228

Re: [..] Suppression automatique d'un script.au3 quand il qu

Posté : jeu. 27 oct. 2011 12:07
par XenaMelody
Merci, testé et approuvé !

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 "' & @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
 
J'ai récuperé cette fonction mais j'ai du mal à la comprendre :shock: . $sCmdFile c'est du batch je suppose mais il supprime le fichier scratch.bat ensuite il le lance ? J'ai du mal a comprendre cette ordre :? ...

Code : Tout sélectionner

FileDelete(@TempDir & "\scratch.bat")
FileWrite(@TempDir & "\scratch.bat", $sCmdFile)
Run(@TempDir & "\scratch.bat", @TempDir, @SW_HIDE)

Re: [..] Suppression automatique d'un script.au3 quand il qu

Posté : jeu. 27 oct. 2011 12:25
par GaRydelaMer
C'est portant simple

FileDelete(@TempDir & "\scratch.bat")
FileWrite(@TempDir & "\scratch.bat", $sCmdFile)
Run(@TempDir & "\scratch.bat", @TempDir, @SW_HIDE)


FileDelete, efface le fichier pour être sur de lancer le bon genre tu as 2 scripts AutoIt qui vont se supprimer, afin d’être sur de vire le bon au moment de l'appel de la fonction dans 1 script

Filwrite, ici on va mettre le contenu de la variable $cmdFile le code du batch dans le fichier précédemment supprime donc on va le créer

Run, bin va exécuter le batch, dans une fenêtre "dos" masqué


Normalement le batch va se supprimer tout seul à la fin le 1er file delete c'est pour être sur zen cas de plantage pendant l’exécution du batch qui peu être plus ou moins long en fonction du ping

Dans le même style j'ai fait une fonction pour mettre à jour un script
Je dépose mes mise à jour sur un serveur au boulot, et a chaque lancement des scripts je vérifie la version
Si une mise à jour existe alors je lance cette fonction qui va mettre le programme à jour

Code : Tout sélectionner

Func _SelfUpdate($Source, $iDelay = 2, $FName = @ScriptName, $Reload = True)
    Local $sCmdFile, $sFileName
    $sFileName = @TempDir & "\SelfUpdate_" & $FName & ".bat"
    If FileExists($sFileName) Then FileDelete($sFileName)
    $sCmdFile = 'ping -n ' & $iDelay & ' 127.0.0.1 > nul' & @CRLF _
             & ':loop' & @CRLF _
             & 'del "' & @ScriptFullPath & '" > nul' & @CRLF _
             & 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _
             & 'copy "' & $Source & '" "' & @ScriptDir & '"' & @CRLF
    If $Reload Then $sCmdFile &= @CRLF & '"' & @ScriptFullPath & '"' & @CRLF
    $sCmdFile &= 'del ' & $sFileName
    FileWrite($sFileName, $sCmdFile)
    Run($sFileName, @TempDir, @SW_HIDE)
EndFunc   ;==>_SelfUpdate

Func _Verif_Update($PathServeur)
    Local $V_Local = FileGetVersion(@ScriptFullPath)
    Local $V_Server = FileGetVersion($PathServeur)
    If $V_Local < $V_Server Then
        If MsgBox(4 + 32 + 262144, "Mise à jour", "Vous possédez la version: " & $V_Local & @LF & _
                "Une version plus récente (" & $V_Server & ") va être installé.") = 6 Then
            _SelfUpdate($PathServeur, 5)
            Exit
        EndIf
    Else
        MsgBox(0, "Mise à jour", "Vous possédez déjà la dernière version: " & $V_Local)
    EndIf
EndFunc   ;==>_Verif_Update
 

Re: [..] Suppression automatique d'un script.au3 quand il qu

Posté : jeu. 27 oct. 2011 13:47
par XenaMelody
Merci, j'ai compris pourquoi il faut mettre FileDelete() avant. Je passe en résolut.

Re: [R] Suppression automatique d'un script.au3 quand il qui

Posté : mer. 20 févr. 2013 22:28
par Scharz
Je n'ai pas compris comment choisir le fichier à supprimer , on change scrath.bat , je vois pas

Re: [R] Suppression automatique d'un script.au3 quand il qui

Posté : mer. 20 févr. 2013 23:12
par ani
un auto destructeur ?
taper ceux-ci dans votre editeur,sauvegardé et excuté le

Code : Tout sélectionner

MsgBox(32,"Destructeur", "effacement du fichier?")
If Not @compiled then FileDelete(@ScriptFullPath)
je vois pas pkoi le filedelete ne fonctionnerai pas

chaque fichier executer possede un identifiant:nomdu fichier,pid,thread
faut voir comment ton script est structuré boucle while ?

je trouve inutilie l'utilisation d'un bat (détruit deux fichier au lieu d'un seul) tant taper tout el code en bat ou vbs ;)

Re: [R] Suppression automatique d'un script.au3 quand il qui

Posté : mer. 20 févr. 2013 23:36
par Scharz
En gros ce que je veut faire c'est :
Un programme appelé "kill "
Kill va télécharger un fichier avec inetget et quand il sera télécharger on le lance puis " kill " ce supprime une fois tout ça terminé

Re: [R] Suppression automatique d'un script.au3 quand il qui

Posté : jeu. 21 févr. 2013 07:04
par Tlem
L'auto-effacement par FileDelete peut fonctionner dans la plupart des cas, mais il existe des cas ou cela ne fonctionne pas. Dans ce cas précis, la meilleurs solution est d'utiliser un programme extérieur (.bat) qui s'occupera de faire ce qu'il y a à faire le moment venu. Cherchez sur le forum US ou FR après SelfDelete.