Page 1 sur 1

Possibilité ignorer erreur de version ?

Posté : 11 juillet 2018, 09:53
par erict
Bonjour,

J'utilise WAPT 1.5 community

J'ai un paquet qui installe une application à partir d'un MSI par install_msi_if_needed.
Il se met toujours en erreur dans wapt avec l'erreur : "has been installed and the uninstall key found, but version is not good".
Malgré différents essais, pas moyen de corriger cette erreur. Mais finalement, elle m'importe peu, car le logiciel est bien installé et fonctionne correctement. Par contre, comme un autre paquet en dépend, cette erreur bloque l'installation de cet autre paquet.
Est il possible de dire à WAPT, d'une manière ou d'une autre, d'ignorer cette erreur.
Je connais déja le paramètre accept_returncodes, mais dans ce cas, il ne peut pas être utilisé, il me semble.

Merci d'avance pour votre aide.
E.T.

Re: Possibilité ignorer erreur de version ?

Posté : 11 juillet 2018, 10:23
par erict
Petite précision :

Le numéro de version dans mon fichier config est exactement le même que celui retourné par la commande
get-itemproperty HKLM:\software\wow6432node\microsoft\currentversion\uninstall\uninstall\* | select-object displayname, displayversion

Re: Possibilité ignorer erreur de version ?

Posté : 11 juillet 2018, 11:08
par htouvet
Je soupçonne qu'une des versions est sur 3 composantes "1.2.3" et l'autre sur 4 "1.2.3.0" ?

Vous pouvez forcer la version dans la fonction install_msi_if_needed avec le paramètre :
get_version : fournir une fonction qui retourne la version actuellement installée

Code : Tout sélectionner

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: Possibilité ignorer erreur de version ?

Posté : 11 juillet 2018, 14:47
par erict
htouvet a écrit : Je soupçonne qu'une des versions est sur 3 composantes "1.2.3" et l'autre sur 4 "1.2.3.0" ?
Comme la commande powershell renvoie exactement le numéro de version que j'utilise dans mon fichier control, je pensais que non, mais j'avoue que je ne connais pas toutes les subtilités du monde Windows; msi et compagnie :(

htouvet a écrit :

Code : Tout sélectionner

def my_get_version(soft):
    print(u'Version installée: %s' % soft['version'])
    return soft['version']
Qu'est ce que je dois envoyer à cette fonction ? (la variable soft, c'est le nom du logiciel, sa clé, l'emplacement de l'exe après install... ?)

Merci
E.T.

Re: Possibilité ignorer erreur de version ?

Posté : 17 juillet 2018, 14:05
par erict
Bonjour,

J'ai trouvé dans les setuphelpers une fonction qui me paraissait répondre à ma question :
get_msi_properties.
Du coup, les choses devenaient simples :

Code : Tout sélectionner

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'])
Sauf que maintenant, j'ai droit à une erreur :
Installing sentinelRuntime
TypeError: 'unicode object is not callable'

Et là, j'avoue, je craque un peu...

Petit tip pour ceux qui n'y auraient pas encore pensé pour tester les setuphelpers en console :
Dans une console python, un simple "import setuphelpers" fonctionne. Du coup, après on gagne du temps pour tester son code ;-)
Je sais, c'est bête, mais des fois, on ne pense pas aux choses simples et on perd plein de temps...

Re: Possibilité ignorer erreur de version ?

Posté : 18 juillet 2018, 12:22
par erict
Bonjour,

Après de multiples tests, erreurs, corrections... voila où j'en suis.

Code : Tout sélectionner

# -*- 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)
Dans mon code précédent, j'avais une erreur parce que get_version attendait un "callable object" et pas un "string", d'où la fonction (je n'avais pas compris pourquoi elle était là avant).
Maintenant, j'ai droit à l'erreur :
TypeError: MSIOpenDatabase() argument 1 must be string, not dict
J'ai pourtant essayé d'utiliser la fonction str() dans ma fonction pour y remédier, mais rien n'y fait.

Je continue de lancer des bouteilles à la mer, en espérant qu'un jour, l'une d'elles inspire quelqu'un ;-)

E.T.

Re: Possibilité ignorer erreur de version ?

Posté : 18 juillet 2018, 22:56
par sfonteneau
Dans votre cas le test n'est pas bon

Le but de la manœuvre est d'indiquer à wapt de ne pas aller chercher la version du logiciel dans uninstallkey du logiciel mais ailleurs.

get_version sert à indiquer à wapt le numéro de version du logiciel.

exemple avec le logiciel naps :

Code : Tout sélectionner

       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)
        
on indique à wapt d'aller récupérer la version dans le nom du logiciel.

Dans votre code, vous allez récupérer le numéro de version dans le fichier msi qui est dans le paquet, ce n'est pas logique.

Pour résoudre votre problématique vous pouvez aussi modifier tout simplement le min_version en appelant install_msi_if... plutôt que d'utiliser get_version

https://github.com/tranquilit/WAPT/blob ... s.py#L3815

Re: Possibilité ignorer erreur de version ?

Posté : 21 juillet 2018, 10:45
par erict
Bonjour,

Merci de votre réponse.
En fait, j'avais décidé de reprendre tout à zéro, et je n'ai plus de probleme de conflit de version. C'est assez bizarre, la seule différence avec mon script de départ, c'est que je n'ai pas précisé de silent_options dans les paramétres (en fait, /q et /norestart sont déja par défaut dans install_msi_if_needed, j'ai remarqué ça dans le code), et du coup, ça fonctionne.
Je ne m'explique pas pourquoi...

A cause de ce probleme, j'ai perdu pas mal de temps, mais sacrément gagné en connaissances sur le fonctionnement de wapt, au travers de mes tests et de vos réponses, qui vont m'être très utiles par la suite.

Merci à vous.
E.T.