Page 1 sur 1
[R] Registre Uninstall
Posté : dim. 06 mai 2012 16:52
par silvere
Bonjour,
Voila, j'ai fait un logiciel et j'aimerais que l'utilisateur puisse le désinstaller en allant dans Demander > panneau de configuration > ajouter ou supprimer des programmes.
Je savais que sa se trouvé dans le registre, puis j'ai fait un petit recherche et j'ai vu qu'il fallait créé un clé dans : "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Nomduprogramme"
mais voila je sais pas comment me servir de regwrite et j'ai pas envie de faire de bêtise dans mon registre.
Merci d'avance
Re: [..] Registre Uninstall
Posté : dim. 06 mai 2012 18:38
par mikell
Pour un script compilé (attention c'est pour XP) :
Code : Tout sélectionner
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Nomduprogramme")
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Nomduprogramme", "UninstallString", "REG_SZ", @ScriptFullPath & " delete")
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Nomduprogramme", "DisplayName", "REG_SZ", "Nomduprogramme")
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Nomduprogramme", "DisplayIcon", "REG_SZ", @ScriptFullPath)
Dans cet exemple, la clé lance ton programme avec le paramètre 'delete' : "Nomduprogramme.exe delete"
ça te permet d'intégrer à ton programme un test et une fonction d'autodestruction qui se déclenchera si le programme est lancé avec ce paramètre, par exemple
► Afficher le texte
Code : Tout sélectionner
sleep(500)
If $CmdLine[0]<>0 Then
If $CmdLine[1] = "delete" Then
_SelfDelete()
Else
MsgBox(0, "", $CmdLine[1])
EndIf
EndIf
; http://www.autoitscript.com/forum/topic/19370-autoit-wrappers/page__view__findpost__p__199605
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
Re: [..] Registre Uninstall
Posté : dim. 06 mai 2012 18:58
par silvere
Merci, t'es énorme.
Mais tu dit que c'est juste pour xp ce qui veut dire que c'est différent pour vista a W7 ?
Re: [..] Registre Uninstall
Posté : dim. 06 mai 2012 19:09
par mikell
Pas forcément, les clés de registre sont peut-être les mêmes
La fonction d'autodestruction peut ne pas fonctionner sous W7, mais une petite recherche sur le forum US avec le mot 'selfdelete' te permettra de la trouver facilement
Mais le test est facile :
Ce que j'ai mis dans le spoiler, tu le compiles et tu mets l'exe sur le bureau
Ensuite tu mets tes clés de registre en les adaptant au chemin et au nom de l'exe
Enfin tu vas dans "ajout-suppression de programmes" et tu supprimes le prog
Tu verras bien si ça marche ^^
Un détail, n'oublie pas lors du test de détruire aussi les clés de registre
Code : Tout sélectionner
If $CmdLine[1] = "delete" Then
RegDelete ... etc
_SelfDelete()
Re: [..] Registre Uninstall
Posté : dim. 06 mai 2012 19:18
par silvere
le problème c'est que je suis sous Ubuntu

Re: [..] Registre Uninstall
Posté : dim. 06 mai 2012 19:21
par mikell
Connais pas... faut tester, mais je t'ai mis tous les éléments nécessaires

Re: [..] Registre Uninstall
Posté : dim. 06 mai 2012 19:34
par silvere
Oui, oui, Merci j'ai trouvé encore mieux que ce que je chercher :
► Afficher le texte
Code : Tout sélectionner
Local $Path = FileGetShortName(@ScriptFullPath)
Local $Temp = _TempFile(@TempDir, '~', '.bat')
FileWrite($Temp, _
'@echo off' & @CRLF & _
':loop' & @CRLF & _
'del ' & $Path & @CRLF & _
'if exist ' & $Path & ' goto loop' & @CRLF & _
'rd /q /s ' & FileGetShortName(@ScriptDir) & @CRLF & _
'del ' & $Temp)
FileChangeDir(@TempDir)
Run($Temp, '', @SW_HIDE)
Ce code supprime le dossier ou se trouve l’exécutable attention a ne pas le placé dans n'importe quel dossier !
Re: [R] Registre Uninstall
Posté : dim. 06 mai 2012 22:19
par Tlem
Pour faire ce genre de manipulation, il existe des outils adaptés.
Pour ce faire, vous devez utiliser un installeur tel que "Inno Setup" ou encore "NSIS".
Si c'est pour du bricolage interne, ce que vous faites ira très bien. Mais si vous comptez diffuser un programme, je vous conseil une solution plus "propre". ^^
Re: [R] Registre Uninstall
Posté : dim. 06 mai 2012 22:26
par silvere
Tlem a écrit :Pour faire ce genre de manipulation, il existe des outils adaptés.
Pour ce faire, vous devez utiliser un installeur tel que "Inno Setup" ou encore "NSIS".
Si c'est pour du bricolage interne, ce que vous faites ira très bien. Mais si vous comptez diffuser un programme, je vous conseil une solution plus "propre". ^^
Oui, on me l'a déjà a dit mais je préfère pouvoir tout personnalisé

.
Mais je vois voi pas en quoi se scripte est "sale"

Re: [R] Registre Uninstall
Posté : dim. 06 mai 2012 22:43
par Tlem
Un installeur standard et généralement connu et rassure.
Un installeur est tout à fait personnalisable, tout en gardant un aspect "pro".
Un installeur est prévu pour faire ce genre de choses et permet que votre script ne soit pas dépendant de la partie installation.
Un installeur permet de faire des choses plus simplement (l'adjonction de fichiers sans toucher le code, le choix des OS supportés, les raccourcis bureau, etc ...).
bref, faites comme vous le sentez, mais regardez ce qui ce fait généralement pour ce type d'application.
PS: Je n'ai pas dit que votre script est sale, j'ai simplement souligné que la méthode n'est pas très "propre". Il y à une nuance.
En faisant comme cela, votre script est dépendant de l'architecture de la plateforme. Si vous voulez faire les choses de manière plus complète, vous devez alors gérer vous même les incompatibilités d'OS, les versions, les chemins, les fichiers, etc ... directement dans le code, alors qu'avec un installeur (tel que Inno Setup par exemple) ce ne sont que des cases à cocher.
Mais bon, je vais arrêter là d'essayer de vous convaincre du bienfondé de mes propos, car en la circonstance, les gouts et les couleurs n'ont pas lieu d'être discutés.
