Bonjour,
Juste un petit retour car j'ai trouvé pour supprimer la dll dans system32 sur un windows 64bits : with disable_file_system_redirection(): remove_file(makepath(system32(),'cpwmon64.dll'))
Il faut également arrêter le service Spooler avant et le relancer après car il utilise la dll.
Cordialement,
Bastien
Le 14/04/2015 15:36, Bastien HERMITTE a écrit :
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...
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...
[2] http://superuser.com/questions/580555/cutepdf-writer-problems-with-silent-un...
Merci d'avance.
Bastien
WAPT mailing list WAPT@lists.tranquil.it http://lists.tranquil.it/listinfo/wapt
WAPT mailing list WAPT@lists.tranquil.it http://lists.tranquil.it/listinfo/wapt