Página 1 de 1

Paquete de prueba de PSIM

Publicado: 21 de junio de 2023 - 10:24
por gaelds
Buen día,
Estoy intentando crear un paquete para la demo de PSIM 2021B. La clave de desinstalación está en el registro, pero se encuentra en HKEY_CURRENT_USER:

Código: Seleccionar todo

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\6305213B-44F4-476B-85A0-EB506EDB8E01_is1
La instalación funciona dejando "Clave" en blanco en install_exe_if_needed, pero para la desinstalación no puedo usar desinstalar_cmd()Esto indica
"ERROR FATAL: 2: No se puede abrir la clave Software\Microsoft\Windows\CurrentVersion\Uninstall\['6305213B-44F4-476B-85A0-EB506EDB8E01_is1']"
¿Hay otra forma de usar esta clave para desinstalar? ¿O es necesario usar el comando `run(r'%s /verysilent' % uninstall_string)`?

Aquí está el código para mi setup.py:

Código: Seleccionar todo

# -*- 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)
         

Y en segundo lugar, sin la función "audit()", o con un simple return("OK"), siempre obtengo un error: "Auditoría cancelada debido a una excepción: índice de lista fuera de rango"

Re: Paquete de prueba de PSIM

Publicado: 26 de junio de 2023 - 11:20
por dcardon
Hola Gaël,

la variable `uninstall_key` te permite sobrescribir la clave de desinstalación que proporciona el software, pero no la escribe en el registro.

Así que no hay muchas otras formas de hacerlo aparte de lo que has descrito para el proceso de desinstalación.

Dado que la clave no está registrada en la ubicación correcta en el registro, creo que sería incluso mejor no especificar `uninstall_key` en absoluto. De lo contrario, la función `def audit()` intentará buscarla en el registro (este es el comportamiento predeterminado si no se define ninguna función de auditoría en el paquete). Esto debe estar generando el mensaje de error que estás recibiendo, que no es muy bueno y que vamos a solucionar.

Si el software está intentando crear la clave en HKCU, es porque cree que se está instalando en el entorno del usuario. Deberíamos comprobar si hay una bandera para forzar una instalación en todo el sistema. Y si no, contacta con el desarrollador para ver si puede solucionar el funcionamiento de su software. De lo contrario, puedes poner este software en la categoría de "podoware" (software desarrollado con los pies :-) ).

Atentamente,

Denis

Re: Paquete de prueba de PSIM

Publicado: 26 de junio de 2023 - 19:24
por gaelds
Gracias a Jimmy y Morgan, quienes depuraron este paquete esta tarde. Este podoware se instala y ya no muestra errores en la consola; eso me basta ;)

Código: Seleccionar todo

setup_binary_name = glob.glob("PSIM*.exe")[0]
ha sido reemplazado por

Código: Seleccionar todo

setup_binary_name = 'PSIM_2021b_Demo_64bit_Setup.exe'
La versión y el tiempo de espera se han modificado en el comando install_exe_if_needed:

Código: Seleccionar todo

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

Código: Seleccionar todo

# -*- 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: Paquete de prueba de PSIM

Publicado: 26 de junio de 2023 - 22:44
por vcardon
Me gusta tu uso de la palabra "podoware", la inventamos nosotros :)