Contactez nous

Possibilité ignorer erreur de version ?

Questions about WAPT Packaging / Requêtes et aides autour des paquets Wapt.
Règles du forum

* Questions can be asked in English or in French. If the thread is started in English, stick to English, if it is started in French, stick to French.
* Vous pouvez poser vos questions en Français ou en Anglais. Si un sujet est commencé en français, merci de répondre en français. Si un sujet est commencé en anglais, merci de répondre en anglais.
* Please prefix of the title of the thread to [SOLVED] if it is solved.
* Merci de préfixer le titre du thread par [RESOLU] si il est résolu.

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.
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
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)
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.
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...
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.
Dans votre cas le test n'est pas bon

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

get_version sert a indiquer a 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 a 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 modifier le min_version en appelant install_msi_if... plutôt que d'utiliser get_version

https://github.com/tranquilit/WAPT/blob ... s.py#L3815
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.