Pagina 1 di 1
È possibile ignorare gli errori di versione?
Pubblicato: 11 luglio 2018 - 09:53
di Eric
Salve,
utilizzo WAPT 1.5 Community.
Ho un pacchetto che installa un'applicazione da un file MSI tramite `install_msi_if_needed`.
Questo pacchetto genera sempre un errore in WAPT con il messaggio: "è stato installato e la chiave di disinstallazione è stata trovata, ma la versione non è valida".
Nonostante vari tentativi, non sono riuscito a risolvere questo errore. In definitiva, non è un grosso problema per me, dato che il software viene installato correttamente e funziona senza problemi. Tuttavia, poiché un altro pacchetto dipende da questo, l'errore impedisce l'installazione di quest'ultimo.
È possibile, in qualche modo, indicare a WAPT di ignorare questo errore?
Conosco già il parametro `accept_returncodes`, ma in questo caso non sembra applicabile.
per l'aiuto.
anticipo
Re: È possibile ignorare gli errori di versione?
Pubblicato: 11 luglio 2018 - 10:23
di Eric
Solo per chiarire:
il numero di versione nel mio file di configurazione è esattamente lo stesso di quello restituito dal comando
`get-itemproperty HKLM:\software\wow6432node\microsoft\currentversion\uninstall\uninstall\* | select-object displayname, displayversion`
Re: È possibile ignorare gli errori di versione?
Pubblicato: 11 luglio 2018 - 11:08
di htouvet
Ho il sospetto che una delle versioni sia su 3 componenti "1.2.3" e l'altra su 4 "1.2.3.0"?
È possibile forzare la versione nella funzione install_msi_if_needed con il parametro:
get_version: fornisce una funzione che restituisce la versione attualmente installata
Codice: Seleziona tutto
def my_get_version(soft):
print(u'Version installée: %s' % soft['version'])
return soft['version']
def install():
install_msi_if_needed('setup.msi',get_version=my_get_version)
Re: È possibile ignorare gli errori di versione?
Pubblicato: 11 luglio 2018 - 14:47
di Eric
htouvet ha scritto:
Sospetto che una delle versioni sia su 3 componenti "1.2.3" e l'altra su 4 "1.2.3.0"?
Poiché il comando PowerShell restituisce esattamente il numero di versione che sto utilizzando nel mio file di controllo, pensavo di no, ma ammetto di non conoscere tutti i dettagli del mondo Windows, MSI e simili
htouvet ha scritto:
Codice: Seleziona tutto
def my_get_version(soft):
print(u'Version installée: %s' % soft['version'])
return soft['version']
Cosa dovrei inviare a questa funzione? (La variabile 'soft' è il nome del software, la sua chiave, la posizione dell'eseguibile dopo l'installazione...?)
GRAZIE
E.
Re: È possibile ignorare gli errori di versione?
Pubblicato: 17 luglio 2018 - 14:05
di Eric
Buongiorno,
Ho trovato una funzione in setuphelpers che sembrava rispondere alla mia domanda:
ottenere_proprietà_msi.
Quindi le cose sono diventate semplici:
Codice: Seleziona tutto
def install():
print ('Installing sentinelRuntime')
soft = get_msi_properties("Sentinel Runtime.msi")
install_msi_if_needed('Sentinel Runtime.msi', '/q /norestart', get_version=soft['Version'])
Solo che ora mi è concesso un errore:
Installazione di Sentinel Runtime
TypeError: 'l'oggetto Unicode non è richiamabile'
E qui, lo confesso, comincio a cedere un po'...
Un rapido suggerimento per chi non ci ha ancora pensato per testare setuphelpers nella console:
In una console Python, funziona un semplice comando "import setuphelpers". Questo fa risparmiare tempo in seguito, quando si testa il codice

Lo so, è sciocco, ma a volte non pensiamo alle cose semplici e sprechiamo un sacco di tempo...
Re: È possibile ignorare gli errori di versione?
Pubblicato: 18 luglio 2018 - 12:22
di Eric
Buongiorno,
Dopo numerosi test, errori, correzioni... eccomi qui.
Codice: Seleziona tutto
# -*- coding: utf-8 -*-
from setuphelpers import *
uninstallkey = []
def get_sentinel_version(soft="Sentinel Runtime.msi"):
sentiProps = get_msi_properties(soft)
sentiVers = str(sentiProps['Version'])
#print('Type de sentiVers : ' type(sentivers))
return sentiVers
def install():
print('installing unilim-sentinelRuntime')
install_msi_if_needed('Sentinel Runtime.msi', '/q /norestart', get_version=get_sentinel_version)
Nel mio codice precedente, ho riscontrato un errore perché get_version si aspettava un "oggetto richiamabile" e non una "stringa", da qui la funzione (non avevo capito perché fosse lì prima).
Ora, mi è concesso commettere un errore:
TypeError: l'argomento 1 di MSIOpenDatabase() deve essere una stringa, non un dizionario
Ho provato a usare la funzione str() nella mia funzione per risolvere il problema, ma non ha funzionato.
Continuo a inviare messaggi in bottiglia, sperando che un giorno uno di essi possa ispirare qualcuno
E.
Re: È possibile ignorare gli errori di versione?
Pubblicato: 18 luglio 2018 - 22:56
di sfontenau
Nel tuo caso il test non è buono
Lo scopo di questa manovra è dire a wapt di non cercare la versione del software nella chiave di disinstallazione del software, ma altrove.
get_version viene utilizzato per comunicare a wapt il numero di versione del software.
Esempio utilizzando il software Naps:
Codice: Seleziona tutto
def versnaps2(key):
return key['name'].replace('NAPS2 ','')
install_exe_if_needed('naps2-5.3.3-setup.exe',silentflags='/VERYSILENT',key='NAPS2 (Not Another PDF Scanner 2)_is1',get_version=versnaps2)
Wapt riceve l'istruzione di recuperare la versione dal nome del software.
Nel tuo codice recupererai il numero di versione dal file msi presente nel pacchetto, ma ciò non ha senso.
Per risolvere il problema, puoi anche semplicemente modificare min_version chiamando install_msi_if... anziché usare get_version
https://github.com/tranquilit/WAPT/blob ... s.py#L3815
Re: È possibile ignorare gli errori di versione?
Pubblicato: 21 luglio 2018 - 10:45
di Eric
Ciao,
grazie per la risposta.
In realtà, ho deciso di ricominciare da capo e ora non ho più il problema del conflitto di versione. È piuttosto strano; l'unica differenza rispetto al mio script originale è che non ho specificato `silent_options` nei parametri (infatti, `/q` e `/norestart` sono già impostati di default in `install_msi_if_needed`, l'ho notato nel codice), e quindi funziona.
Non so spiegarmi il perché...
A causa di questo problema ho perso parecchio tempo, ma ho imparato molto su come funziona WAPT, grazie ai miei test e alle tue risposte, il che mi sarà molto utile in seguito.
.
Grazie