Possibilité ignorer erreur de version ?

Questions about WAPT Packaging / Requêtes et aides autour des paquets Wapt.
Règles du forum
Règles du forum communautaire
* English support on www.reddit.com/r/wapt
* Le support communautaire en français se fait sur ce forum
* Merci de préfixer le titre du topic par [RESOLU] s'il est résolu.
* Merci de ne pas modifier un topic qui est taggé [RESOLU]. Ouvrez un nouveau topic en référençant l'ancien
* Préciser version de WAPT installée, version complète ET numéro de build (2.2.1.11957 / 2.2.2.12337 / etc.) AINSI QUE l'édition Enterprise / Discovery
* Les versions 1.8.2 et antérieures ne sont plus maintenues. Les seules questions acceptées vis à vis de la version 1.8.2 sont liés à la mise à jour vers une version supportée (2.1, 2.2, etc.)
* Préciser OS du serveur (Linux / Windows) et version (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019)
* Préciser OS de la machine d'administration/création des paquets et de la machine avec l'agent qui pose problème le cas échéant (Windows 7 / 10 / 11 / Debian 11 / etc.)
* Eviter de poser plusieurs questions lors de l'ouverture de topic, sinon il risque d'être ignorer. Si plusieurs sujet, ouvrir plusieurs topic, et de préférence les uns après les autres et pas tous en même temps (ie ne pas spammer le forum).
* Inclure directement les morceaux de code, les captures d'écran et autres images directement dans le post. Les liens vers les pastebin, les bitly et autres sites tierces seront systématiquement supprimés.
* Comme tout forum communautaire, le support est fait bénévolement par les membres. Si vous avez besoin d'un support commercial, vous pouvez contacter le service commercial Tranquil IT au 02.40.97.57.55
erict
Messages : 56
Inscription : 22 déc. 2017 - 19:09

11 juil. 2018 - 09:53

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.
erict
Messages : 56
Inscription : 22 déc. 2017 - 19:09

11 juil. 2018 - 10:23

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
Avatar de l’utilisateur
htouvet
Expert WAPT
Messages : 402
Inscription : 16 mars 2015 - 10:48
Contact :

11 juil. 2018 - 11:08

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)
Tranquil IT
erict
Messages : 56
Inscription : 22 déc. 2017 - 19:09

11 juil. 2018 - 14:47

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.
erict
Messages : 56
Inscription : 22 déc. 2017 - 19:09

17 juil. 2018 - 14:05

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...
erict
Messages : 56
Inscription : 22 déc. 2017 - 19:09

18 juil. 2018 - 12:22

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.
Avatar de l’utilisateur
sfonteneau
Expert WAPT
Messages : 1783
Inscription : 10 juil. 2014 - 23:52
Contact :

18 juil. 2018 - 22:56

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
erict
Messages : 56
Inscription : 22 déc. 2017 - 19:09

21 juil. 2018 - 10:45

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.
Verrouillé