Página 1 de 1

[RESUELTO] La versión en el registro no coincide con los requisitos de min_version

Publicado: 3 de enero de 2024 - 13:54
por cefinformatique
Buen día,

Creé un paquete para implementar el software (ya instalado en las máquinas cliente) versión 23.1.0.4

Aquí está el archivo setup.py para mi paquete:

Código: Seleccionar todo

def install():
    softname ='AWCLIENTSQL'
    listAW=installed_softwares(softname)
    if listAW == softname:
        print("Mise a jour de DiaClientSQL")
        install_exe_if_needed('DiaClientSQLInstall.exe',
            silentflags='/Silent',
            key='AWCLIENTSQL',
            remove_old_version=True
        )
    else:
        print("Mise a jour de DiaClientSQL")
        install_exe_if_needed('DiaClientSQLInstall.exe',
            silentflags='/Silent',
            key='AWCLIENTSQL'
        )
        filecopyto(r'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\ACDSuite\DiaClient SQL.lnk',r'C:\Users\Public\Desktop')
Una vez implementado el paquete, obtengo el siguiente error en el 80% de los casos:
waptutils.EWaptSetupException: Error fatal: Se ha ejecutado la instalación DiaClientSQLInstall.exe y se ha encontrado la clave AWCLIENTSQL en el registro, pero la versión en el registro no coincide con los requisitos de min_version=23.1.0.4

EWaptSetupException: Error fatal: Se ha ejecutado la instalación DiaClientSQLInstall.exe y se ha encontrado la clave AWCLIENTSQL en el registro, pero la versión en el registro no coincide con los requisitos de min_version=23.1.0.4
Si reinicio manualmente la actualización, finalmente se aplicará correctamente después de varios intentos.

La versión instalada antes de la actualización vía WAPT era 23.1.0.2

¿Qué puedo hacer para evitar este problema?

Re: la versión en el registro no coincide con los requisitos de min_version

Publicado: 3 de enero de 2024 - 15:24
por sfonteneau
No se pasa ningún argumento min_version a install_exe_if_needed

Entonces la función hace esto:

Código: Seleccionar todo

if min_version is None:
    min_version = get_product_props(exe)['version']
Y recupera el número de versión especificado en las propiedades del archivo.

En tu caso, probablemente no sea bueno

El mejor enfoque sería agregar un argumento min_version con el número de versión asociado con la clave AWCLIENTSQL

Re: la versión en el registro no coincide con los requisitos de min_version

Publicado: 13 de febrero de 2024 - 13:36
por cefinformatique
Hola,

retomo este tema porque, durante una actualización reciente del software, ingresé correctamente el valor de "min_version", pero esto no solucionó el problema.

Encontré la causa: durante la instalación del programa, la versión anterior no se desinstala. Dado que la instalación devuelve un código de error 0 antes de actualizar el número de versión en el registro de Windows, el paquete WAPT compara su número de versión con el número anterior que aún está almacenado en el registro.

Por lo tanto, necesito que el paquete WAPT espere (aproximadamente 20 segundos) entre el final de la instalación y la verificación del número de versión en el registro para resolver este problema.

¿Es esto posible?

Re: la versión en el registro no coincide con los requisitos de min_version

Publicado: 14 de febrero de 2024 - 14:34
por cefinformatique
Resolví mi problema usando el módulo WinReg para eliminar la clave de registro del software antes de la instalación. Es un poco complicado, ¡pero funciona!

Código: Seleccionar todo

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

r"""
Usable WAPT package functions: install(), uninstall(), session_setup(), audit(), update_package()

"""
# Declaring global variables - Warnings: 1) WAPT context is only available in package functions; 2) Global variables are not persistent between calls
uninstallkey = ['AWCLIENTSQL']

def install():
    killalltasks(control.get_impacted_process_list())
    softname ='AWCLIENTSQL'
    listFULL=installed_softwares(softname)
    listAW=listFULL[0]['key']
    if listAW == softname:
        # Define the registry key path
        key_path = r"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
        # Open the registry key for deletion
        try:
            with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, key_path, 0, winreg.KEY_ALL_ACCESS) as registry_key:
                winreg.DeleteKey(registry_key, "AWCLIENTSQL")
                print("Registry key deleted successfully.")
        except FileNotFoundError:
            print("Registry key not found.")
        except PermissionError:
            print("Permission error. Run the script with administrative privileges.")
        except Exception as e:
            print(f"An error occurred: {e}")
        print("Mise a jour de DiaClientSQL")
        install_exe_if_needed('DiaClientSQLInstall.exe',
            silentflags='/Silent',
            key=softname,
            remove_old_version=True,
#            min_version=control.get_version()
        )
    else:
        print("Installation de DiaClientSQL")
        install_exe_if_needed('DiaClientSQLInstall.exe',
            silentflags='/Silent',
            key=softname,
            remove_old_version=True
        )
        filecopyto(r'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\ACDSuite\DiaClient SQL.lnk',r'C:\Users\Public\Desktop')

Re: [RESUELTO] La versión en el registro no coincide con los requisitos de min_version

Publicado: 15 de febrero de 2024 - 16:25
por dcardon
Hola Marc,

¡gracias por tus comentarios!

Denis