[Wapt] Désinstallation non silencieuse

Bastien HERMITTE bhermitte at b2pweb.com
Tue Apr 14 15:36:11 CEST 2015


Bonjour,

Merci pour printui je ne connaissait pas non plus !

J'ai réussi à faire un truc pas mal avec celle-ci et à l'aide de regshot
(d'ailleurs sur le repos tis il y a la version 2.7.3 alors que la
dernière version du site http://sourceforge.net/projects/regshot/ est la
1.9.0, c'est normal ?).

J'ai créé une fonction pour supprimer une clé de registre (en
m'inspirant d'une existante) car je n'en ai pas trouvé dans le setuphelpers.
Par contre, je n'arrive pas à supprimer la dll dans le dossier system32,
il me dit qu'elle n'existe pas, j'imagine que c'est lié au 32/64bits, si
vous avez une solution je suis preneur.

Voici le setup.py :

# -*- coding: utf-8 -*-
from setuphelpers import *
import _winreg

uninstallkey = []

def registry_delete_key(root, path, keyname):
    """Delete the specified key from the specified registry path
        root    : HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER ...
        path    : string like "software\\microsoft\\windows\\currentversion"
                           or
"software\\wow6432node\\microsoft\\windows\\currentversion"
        keyname : Name of the key to delete (must not have subkey)
    the path can be either with backslash or slash
    """
    result = False
    path = path.replace(u'/',u'\\')
    try:
        key = reg_openkey_noredir(root,path,sam=KEY_WRITE)
        result = _winreg.DeleteKey(key,keyname)
    except WindowsError as e:
        logger.warning('registry_delete_key:%s'%ensure_unicode(e))
    return result

def install():
    print('Installation de b2p-cutewriter')
    run(r'converter\Setup.exe')
    time.sleep(2)
    run(r'"CuteWriter_v3.0.0.8.exe" /VERYSILENT /NO3D /SUPPRESSMSGBOXES
/NORESTART')
    time.sleep(2)

def uninstall():
    run('rundll32 printui.dll,PrintUIEntry /dl /n"CutePDF Writer"')
    time.sleep(1)
    run('rundll32 printui.dll,PrintUIEntry /dd /m"CutePDF Writer"')
    time.sleep(1)

    registry_delete_key(HKEY_LOCAL_MACHINE,
'SYSTEM\\CurrentControlSet\\Control\\Print\\Monitors', 'CutePDF Writer
Monitor')
    registry_delete_key(HKEY_LOCAL_MACHINE,
'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall', 'CutePDF
Writer Installation')
    registry_delete_key(HKEY_LOCAL_MACHINE, 'SOFTWARE\\Acro Software
Inc', 'CutePDF Writer')

    if iswin64():
        registry_delete_key(HKEY_LOCAL_MACHINE,
'SOFTWARE\\Wow6432Node\\Acro Software Inc', 'CutePDF Writer')
        registry_delete_key(HKEY_LOCAL_MACHINE,
'SOFTWARE\\Wow6432Node\\GPL Ghostscript', '8.15')
        registry_delete_key(HKEY_LOCAL_MACHINE, 'SOFTWARE\\Wow6432Node',
'GPL Ghostscript')
        remove_file(makepath(system32(),'cpwmon64.dll'))
    else:
        registry_delete_key(HKEY_LOCAL_MACHINE, 'SOFTWARE\\GPL
Ghostscript', '8.15')
        registry_delete_key(HKEY_LOCAL_MACHINE, 'SOFTWARE', 'GPL
Ghostscript')
        remove_file(makepath(system32(),'cpwmon2k.dll'))

    remove_tree(programfiles32 + r'\GPLGS')
    remove_tree(programfiles32 + r'\Acro Software\CutePDF Writer')

Cordialement,

Bastien

Le 13/04/2015 19:47, Denis Cardon a écrit :
> Bonjour Bastien,
>
>> Bonjour et merci pour votre réponse.
>>
>> Je ne connaissais pas regshot, merci pour la découverte !
>> Je ne vais pas tenter le diable si vous ne me conseillez pas de
>> l'utiliser dans ce cas, mais je le garde sous le coude pour un prochain
>> paquet.
>
> en y jetant un petit coup d'oeil supplémentaire, on doit pouvoir faire
> quelque chose d'à peu près propre en utilisant printui.dll ou
> printui.exe pour nettoyer le spooler (ce qui est le truc le plus
> délicat). Sur un winxp, ça donne:
>
> def uninstall():
>     run('rundll32 printui.dll,PrintUIEntry /dl /n"CutePDF Writer"',
> shell=True)
>     run('rundll32 printui.dll,PrintUIEntry /dd /m"CutePDF Writer"',
> shell=True)
>     ...
>
> après il doit rester quelques entrées de base de registre et le
> répertoire c:\program files\acro software à supprimer.
>
> cordialement,
>
> Denis
>
>>
>> Après pas mal de tests/bidouilles avec AutoIt et PsExec je n'ai pas
>> trouvé de solution miracle.
>> Je me contente de tester l'utilisateur et de sortir avec le code
>> d'erreur 1 si c'est l'utilisateur système qui est utilisé, ainsi je peux
>> me rendre compte de mon erreur et aller désinstaller le paquet via la
>> commande wapt-get.
>>
>> J'ai également prévu de faire un paquet pour PDFCreator, mais certains
>> de mes utilisateurs ne jurent que par CutePDF...
>>
>> Bref, merci encore pour votre aide.
>>
>> Cordialement,
>>
>> Bastien
>>
>> Le 13/04/2015 13:48, Denis Cardon a écrit :
>>> Bonjour Bastien,
>>>
>>>> J'essaye de faire un paquet pour le logiciel CutePDF Writer, mais
>>>> celui-ci n'a pas de désinstallation silencieuse : deux msgbox de
>>>> confirmation doivent être cliquées pour valider la désinstallation.
>>>>
>>>> J'ai réussi à contourner le problème avec un script AutoIt inspiré de
>>>> celui-ci :
>>>> http://computers.findincity.net/view/635399295212048058893586/cutepdf-writer-problems-with-silent-uninstall
>>>>
>>>>
>>>> Cela fonctionne lorsque je désinstalle le programme en ligne de
>>>> commande
>>>> (wapt-get remove ...), mais cela bloque lorsque je le fais depuis la
>>>> console.
>>>>
>>>> A priori le problème viendrait de l'utilisation du compte système qui
>>>> n'a pas de bureau interactif.
>>>>
>>>> Ma question est la suivante : est-ce possible de forcer
>>>> l'utilisation du
>>>> compte administrateur même lors de l'installation via la console ?
>>>> Sinon comment faire dans ce cas là ?
>>>
>>> Au niveau de la configuration de l'exécution du waptservice, il est
>>> exécuté en tant que "Local System" et n'a pas le droit d'interagir
>>> avec le desktop. La notion de pouvoir interagir avec le bureau est
>>> plus ou moins caduque avec les WinVista et ultérieur (ça pose plein de
>>> soucis de sécurité et de reproductibilité) [1]. Vous pouvez essayer de
>>> cocher la case pour voir si ça change le problème, mais je vous le
>>> déconseille.
>>>
>>> Le compte Local System dispose bien d'un buffer graphique, sinon la
>>> plupart des installeurs ne fonctionnerait pas du tout à travers le
>>> waptservice car ils affichent souvent quelques fenêtres même si elle
>>> servent à rien.
>>>
>>> Autoit doit avoir besoin d'un bureau interactif pour gérer ses clics
>>> de souris ou ses frappes de clavier comme un utilisateur l'aurait
>>> fait, et en fait ça pose problème avec la plupart des les outils de
>>> déploiements[2]. Mais j'ai souvenir d'un adminsys qui utilisait du
>>> autoit avec du fog snapin (avant de passer à wapt), donc on doit quand
>>> même pouvoir faire des choses, mais je ne sais pas dans quelle mesure
>>> c'est fiable à 100%.
>>>
>>> Une alternative pour la désinstallation est de supprimer tout les
>>> fichiers et les clefs de registre qui ont été installé par le
>>> programme dans une méthode "def uninstall():". Le logiciel regshot
>>> (paquet tis-regshot) permet de tracer les fichier copié et les clefs
>>> de registre créées lors de l'installation d'un logiciel. Toutefois
>>> CutePDF créer une imprimante virtuelle et mets des clefs de registre
>>> partout dans HKLM et doit interagir avec le spooler, donc je ne pense
>>> pas que c'est une bonne idée d'adopter cette méthode non plus.
>>>
>>> Dans le [2], il est indiqué que si vous acheter la version payante,
>>> vous pouvez supprimer la popup en question. Donc soit vous vous passer
>>> de la désinstallation, soit vous payez, soit vous utiliser une autre
>>> imprimante PDF (le paquet tis-pdfcreator s'installe et se désinstalle
>>> proprement).
>>>
>>> Cordialement,
>>>
>>> Denis
>>>
>>> [1]
>>> http://superuser.com/questions/415204/how-do-i-allow-interactive-services-in-windows-7
>>>
>>> [2]
>>> http://superuser.com/questions/580555/cutepdf-writer-problems-with-silent-uninstall
>>>
>>>
>>>>
>>>> Merci d'avance.
>>>>
>>>> Bastien
>>>>
>>>> _______________________________________________
>>>> WAPT mailing list
>>>> WAPT at lists.tranquil.it
>>>> http://lists.tranquil.it/listinfo/wapt
>>>>
>>>
>>
>



More information about the WAPT mailing list