Page 1 sur 1

Paquet PSIM Trial

Posté : 21 juin 2023 - 10:24
par gaelds
Bonjour,
J'essaye de créer un paquet pour la démo de PSIM 2021B. La clé dé désinstallation est bien dans le registre mais dans HKEY_CURRENT_USER :

Code : Tout sélectionner

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\6305213B-44F4-476B-85A0-EB506EDB8E01_is1
L'installation fonctionne en laissant vide "Key" dans le install_exe_if_needed, mais pour la désinstallation, je ne peux pas utiliser uninstall_cmd(), cela indique
"FATAL ERROR : 2 : The key Software\Microsoft\Windows\CurrentVersion\Uninstall\['6305213B-44F4-476B-85A0-EB506EDB8E01_is1'] can not be opened"
Est-ce qu'il y a un autre moyen d'utiliser cette clé pour désinstaller ? ou bien il faut forcément utiliser la commande run(r'%s /verysilent' % uninstall_string) ?

Voici le code de mon setup.py:

Code : Tout sélectionner

# -*- coding: utf-8 -*-
from setuphelpers import *
setup_binary_name = glob.glob("PSIM*.exe")[0]
app_name  = "_".join(setup_binary_name.split("_")[:2])
app_dir = makepath('C:\Powersim')
app_dir_binaries = makepath(app_dir,"_".join(setup_binary_name.split("_")[:3]))
binary_name = "PSIM.exe"
kill_list = [binary_name]
shortcutsdir = makepath(common_desktop(),'Logiciels','Elec - Automatisme')
uninstallkey_psim = ['6305213B-44F4-476B-85A0-EB506EDB8E01_is1']
uninstall_string = r'%s\unins000.exe' %app_dir_binaries

def install():
    print(r'Suppression des anciens PSIM')
    run_notfatal(r'C:\Powersim\PSIM11.1.1_Demo\unins000.exe /verysilent')
    run_notfatal(r'MsiExec.exe /qn /X{D46F2B61-FEE0-46AF-B57F-0EF74F0ECC98}')
    if isfile(makepath(shortcutsdir,'PSIM.lnk')):
        remove_file(makepath(shortcutsdir,'PSIM.lnk'))
        
    print(r'Installation de %s' % app_name)
    killalltasks(kill_list)
    install_exe_if_needed(setup_binary_name,
        silentflags='/VERYSILENT /SUPPRESSMSGBOXES /NORESTART',
        key='',
        min_version='2021b'
    )

    print(r'Création du raccourci %s dans %s' %(app_name,shortcutsdir))
    if not isdir(shortcutsdir):
        mkdirs(shortcutsdir)
    create_shortcut(makepath(shortcutsdir,'%s.lnk' %app_name), target=makepath(app_dir_binaries,binary_name))
    remove_desktop_shortcut('PSIM License Monitor')
    remove_desktop_shortcut(app_name)

def uninstall():
    print(r"Desinstallation de %s" %app_name)
    killalltasks(kill_list)
    ##uninstall_cmd(uninstallkey_psim)
    run_notfatal(r'%s /verysilent' % uninstall_string)
    if  isfile(makepath(shortcutsdir,'%s.lnk' %app_name)):
        remove_file(makepath(shortcutsdir,'%s.lnk' %app_name))
    if isdir(app_dir):
        remove_tree(app_dir)

def audit():
    if isfile(makepath(app_dir_binaries,binary_name)):
        return("OK")
    else:
        return("Erreur : %s est introuvable !" %binary_name)
         

Et second souci, sans fonction "audit()", ou avec un simple return("OK"), j'ai toujours une erreur : "Audit aborted due to exception: list index out of range"

Re: Paquet PSIM Trial

Posté : 26 juin 2023 - 11:20
par dcardon
Bonjour Gaël,

la variable uninstall_key permet d'overrider ce que le logiciel va donner comme clef de désinstallation, mais ne va pas l'écrire dans la base de registre.

Donc il n'y a pas trop de manière de faire autrement que ce que vous indiquez pour la partie désinstallation.

Vu que le clef n'est pas inscrite au bon endroit dans la base de registre, je pense qu'il faudrait même mieux ne pas renseigner uninstall_key, sinon la fonction def audit() va essayer de la chercher dans la base de registre (c'est le fonctionnement par défaut si aucune fonction d'audit est définie dans le paquet. Ca doit générer le message d'erreur que vous avez, qui est pas joli et que l'on va corriger.

Si le logiciel essaye de créer la clef dans HKCU, c'est qu'il pense s'installer en environnement utilisateur. Il faudrait voir si il n'y a pas un flag pour forcer l'install système-wide. Et à défaut voir avec l'éditeur si il ne pourrait pas corriger le fonctionnement de son logiciel. Sinon vous pourrez mettre ce soft dans la catégorie "podoware" (logiciel développé avec les pieds :-) ) .

Cordialement,

Denis

Re: Paquet PSIM Trial

Posté : 26 juin 2023 - 19:24
par gaelds
Merci à Jimmy et Morgan qui m'ont débuggé ce paquet cet après-midi. Ce podoware s'installe et ne renvoie plus d'erreur sur la console, ça me suffit ;)

Code : Tout sélectionner

setup_binary_name = glob.glob("PSIM*.exe")[0]
a été remplacé par

Code : Tout sélectionner

setup_binary_name = 'PSIM_2021b_Demo_64bit_Setup.exe'
La version et le timeout ont été modifiés dans la commande install_exe_if_needed :

Code : Tout sélectionner

install_exe_if_needed(setup_binary_name,
        silentflags='/VERYSILENT /SUPPRESSMSGBOXES /NORESTART',
        key='',
        min_version='',
        timeout=900
    )

Code : Tout sélectionner

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

setup_binary_name = 'PSIM_2021b_Demo_64bit_Setup.exe'
app_name  = "_".join(setup_binary_name.split("_")[:2])
app_dir = makepath('C:\Powersim')
app_dir_binaries = makepath(app_dir,"_".join(setup_binary_name.split("_")[:3]))
binary_name = "PSIM.exe"
kill_list = [binary_name]
uninstallkey_psim = ['F8C0340D-A8CE-4B15-96C0-D3F6A564A9DF_is1']
uninstall_string = r'%s\unins000.exe' %app_dir_binaries

def install():
    if isfile(makepath(shortcutsdir,'PSIM.lnk')):
        remove_file(makepath(shortcutsdir,'PSIM.lnk'))
    print(r'Installation de %s' % app_name)
    killalltasks(kill_list)

    install_exe_if_needed(setup_binary_name,
        silentflags='/VERYSILENT /SUPPRESSMSGBOXES /NORESTART',
        key='',
        min_version='',
        timeout=900
    )

def uninstall():
    print(r"Desinstallation de %s" %app_name)
    killalltasks(kill_list)
    run_notfatal(r'%s /verysilent' % uninstall_string)
    if isdir(app_dir):
        remove_tree(app_dir)

Re: Paquet PSIM Trial

Posté : 26 juin 2023 - 22:44
par vcardon
J'aime votre usage du mot "podoware", on l'a inventé :)