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

Preguntas sobre paquetes WAPT / Solicitudes y ayuda sobre paquetes WAPT.
Reglas del foro
Reglas del foro de la comunidad
* Soporte en inglés en www.reddit.com/r/wapt
* El soporte de la comunidad en francés está disponible en este foro
* Por favor, anteponga [RESUELTO] al título del tema si está resuelto.
* Por favor, no edite un tema que esté etiquetado como [RESUELTO]. Abra un nuevo tema haciendo referencia al anterior.
* Especifique la versión de WAPT instalada, la versión completa y el número de compilación (2.2.1.11957 / 2.2.2.12337 / etc.), así como la edición Enterprise/Discovery.
* Las versiones 1.8.2 y anteriores ya no son compatibles. Las únicas preguntas aceptadas sobre la versión 1.8.2 están relacionadas con la actualización a una versión compatible (2.1, 2.2, etc.).
* Especifique el sistema operativo del servidor (Linux/Windows) y la versión (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019).
* Especifique el sistema operativo de la máquina de administración/creación de paquetes y de la máquina con el agente problemático, si corresponde (Windows 7/10/11/Debian 11/etc.).
* Evite hacer varias preguntas al abrir un tema, ya que podría ser ignorado. Si hay varios temas, ábralos por separado, preferiblemente uno tras otro y no todos a la vez (es decir, no sature el foro con spam).
* Incluya fragmentos de código, capturas de pantalla y otras imágenes directamente en la publicación. Los enlaces a Pastebin, Bitly y otros sitios de terceros serán eliminados sistemáticamente.
* Como en cualquier foro comunitario, el soporte es proporcionado voluntariamente por los miembros. Si necesita soporte comercial, puede comunicarse con el departamento de ventas de Tranquil IT al 02.40.97.57.55.
Bloqueado
cefinformática
Mensajes: 31
Inscripciones: 26 de mayo de 2023 - 14:25 horas.

3 de enero de 2024 - 13:54

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?
Última edición realizada por cefinformatique el 14 de febrero de 2024 a las 14:35, editado 2 veces.
Avatar de usuario
Sfonteneau
Experto en WAPT
Mensajes: 2312
Registrado: 10 de julio de 2014 - 23:52
Contacto :

3 de enero de 2024 - 15:24

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
cefinformática
Mensajes: 31
Inscripciones: 26 de mayo de 2023 - 14:25 horas.

13 de febrero de 2024 - 13:36

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?
cefinformática
Mensajes: 31
Inscripciones: 26 de mayo de 2023 - 14:25 horas.

14 de febrero de 2024 - 14:34

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')
Avatar de usuario
dcardón
Experto en WAPT
Mensajes: 1908
Inscripción: 18 de junio de 2014 - 09:58
Ubicación: Saint Sébastien sur Loire
Contacto :

15 de febrero de 2024 - 16:25

Hola Marc,

¡gracias por tus comentarios!

Denis
Denis Cardon - Tranquil IT
¡Comparte tus experiencias en WAPT! Envíanos las URL de tus blogs y artículos en la "Tu opinión del foro y los publicaremos en el de WAPT
Bloqueado