Faire un script qui se désinstalle proprement
#5
Petite mise à jour tardive, vu que j'avais totalement oublié l'existence de ce post.

Si votre script n'utilise pas de timers ou d'utimers, vous pouvez enlever les lignes correspondantes dans la procédure uninstall afin de ne pas encombrer inutilement votre code.
Si votre script ne déclare pas de package au moyen de package provide YOURSCRIPTNAME, vous pouvez enlever la ligne package forget YOURSCRIPTNAME.
Si votre script n'utilise pas de packs de langue (msgcat), vous pouvez enlever les lignes correspondantes.

A placer avant toute autre ligne de code dans votre script :
tcl
if {[::tcl::info::commands ::YOURNAMESPACE::uninstall] eq "::YOURNAMESPACE::uninstall"} { ::YOURNAMESPACE::uninstall }



Procédure à placer de préférence avant toute autre procédure dans votre script :
tcl
###############################################################################
# Procédure de désinstallation : le script se désinstalle totalement avant
# chaque rehash ou à chaque relecture au moyen de la commande "source" ou autre.
###############################################################################
proc ::YOURNAMESPACE::uninstall {args} {
putlog "Désallocation des ressources de YOURSCRIPTNAME..."
# Suppression des binds.
foreach binding [lsearch -inline -all -regexp [binds *[set ns [::tcl::string::range [namespace current] 2 end]]*] " \{?(::)?$ns"] {
unbind [lindex $binding 0] [lindex $binding 1] [lindex $binding 2] [lindex $binding 4]
}
# Arrêt des timers en cours.
foreach running_timer [timers] {
if { [::tcl::string::match "*[namespace current]::*" [lindex $running_timer 1]] } { killtimer [lindex $running_timer 2] }
}
# Arrêt des utimers en cours.
foreach running_utimer [utimers] {
if { [::tcl::string::match "*[namespace current]::*" [lindex $running_utimer 1]] } { killutimer [lindex $running_utimer 2] }
}
# On décharge les packs de langue.
if { [::tcl::dict::exists $::msgcat::Msgs [::msgcat::mclocale] [namespace current]] } {
::tcl::dict::unset ::msgcat::Msgs [::msgcat::mclocale] [namespace current]
}
namespace delete ::YOURNAMESPACE
# Suppression de la déclaration de package.
package forget YOURSCRIPTNAME
}



Bind :
tcl
bind evnt - prerehash ::YOURNAMESPACE::uninstall


Répondre Avertir


Messages dans ce sujet
RE: Faire un script qui se désinstalle proprement - par MenzAgitat - 17/05/2017, 18:50

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté