Pagina 1 di 1

[RISOLTO] La versione nel registro non corrisponde ai requisiti di min_version

Pubblicato: 3 gennaio 2024 - 13:54
di cefinformatique
Buongiorno,

Ho creato un pacchetto per distribuire il software (già installato sulle macchine client) versione 23.1.0.4

Ecco il file setup.py per il mio pacchetto:

Codice: Seleziona tutto

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 volta distribuito il pacchetto, nell'80% dei casi ricevo il seguente errore:
waptutils.EWaptSetupException: Errore irreversibile: è stato eseguito il programma di installazione DiaClientSQLInstall.exe ed è stata trovata la chiave AWCLIENTSQL nel registro di sistema, ma la versione nel registro non corrisponde ai requisiti di min_version=23.1.0.4

EWaptSetupException: Errore irreversibile: è stato eseguito il programma di installazione DiaClientSQLInstall.exe ed è stata trovata la chiave AWCLIENTSQL nel registro di sistema, ma la versione nel registro non corrisponde ai requisiti di min_version=23.1.0.4
Se riavvio manualmente l'aggiornamento, dopo diversi tentativi alla fine verrà applicato correttamente.

La versione installata prima dell'aggiornamento tramite WAPT era 23.1.0.2

Cosa posso fare per evitare questo problema?

Re: la versione nel registro non corrisponde ai requisiti di min_version

Pubblicato: 3 gennaio 2024 - 15:24
di sfontenau
Nessun argomento min_version viene passato a install_exe_if_needed

Quindi la funzione fa questo:

Codice: Seleziona tutto

if min_version is None:
    min_version = get_product_props(exe)['version']
E recupera il numero di versione specificato nelle proprietà del file.

Nel tuo caso, probabilmente non va bene

L'approccio migliore sarebbe quello di aggiungere un argomento min_version con il numero di versione associato alla chiave AWCLIENTSQL

Re: la versione nel registro non corrisponde ai requisiti di min_version

Pubblicato: 13 febbraio 2024 - 13:36
di cefinformatique
Salve,

riapro questa discussione perché, durante un recente aggiornamento software, ho inserito correttamente il valore "min_version", ma il problema persiste.

Ho individuato la causa: durante l'installazione del programma, la vecchia versione non viene disinstallata. Poiché l'installazione restituisce un codice di errore pari a 0 prima di aggiornare il numero di versione nel registro di sistema di Windows, il pacchetto WAPT confronta il proprio numero di versione con quello vecchio ancora presente nel registro.

Pertanto, per risolvere questo problema, devo far attendere il pacchetto WAPT (circa 20 secondi) nella fase tra la fine dell'installazione e il controllo del numero di versione nel registro.

È possibile?

Re: la versione nel registro non corrisponde ai requisiti di min_version

Pubblicato: 14 febbraio 2024 - 14:34
di cefinformatique
Ho risolto il problema usando il modulo WinReg per eliminare la chiave di registro del software prima dell'installazione. È un po' un trucco, ma funziona!

Codice: Seleziona tutto

# -*- 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: [RISOLTO] La versione nel registro non corrisponde ai requisiti di min_version

Pubblicato: 15 febbraio 2024 - 16:25
di dcardon
Ciao Marc,

grazie per il feedback!

Denis