Página 1 de 1
¿Es posible ignorar los errores de versión?
Publicado: 11 de julio de 2018 - 09:53
por Eric
Hola,
estoy usando WAPT 1.5 Community.
Tengo un paquete que instala una aplicación desde un MSI usando `install_msi_if_needed`.
Siempre me da un error en WAPT con el mensaje: "Se ha instalado y se ha encontrado la clave de desinstalación, pero la versión no es válida".
A pesar de varios intentos, no he podido solucionar este error. En realidad, no me importa mucho, ya que el software se instala correctamente y funciona bien. Sin embargo, como otro paquete depende de él, este error impide la instalación de ese otro paquete. ¿
Es posible indicarle a WAPT, de alguna manera, que ignore este error?
Ya conozco el parámetro `accept_returncodes`, pero en este caso no parece ser aplicable.
por su ayuda.
antemano
Re: ¿Es posible ignorar los errores de versión?
Publicado: 11 de julio de 2018 - 10:23
por Eric
Para aclarar:
el número de versión en mi archivo de configuración es exactamente el mismo que el que devuelve el comando
`get-itemproperty HKLM:\software\wow6432node\microsoft\currentversion\uninstall\uninstall\* | select-object displayname, displayversion`.
Re: ¿Es posible ignorar los errores de versión?
Publicado: 11 de julio de 2018 - 11:08 a. m.
por htouvet
Sospecho que una de las versiones está en 3 componentes "1.2.3" y la otra en 4 "1.2.3.0"?
Puede forzar la versión en la función install_msi_if_needed con el parámetro:
get_version: proporciona una función que devuelve la versión instalada actualmente
Código: Seleccionar todo
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: ¿Es posible ignorar los errores de versión?
Publicado: 11 de julio de 2018 - 14:47
por Eric
htouvet escribió:
Sospecho que una de las versiones está en 3 componentes "1.2.3" y la otra en 4 "1.2.3.0".
Dado que el comando de PowerShell devuelve exactamente el número de versión que estoy usando en mi archivo de control, pensé que no, pero admito que no conozco todas las complejidades del mundo de Windows; MSI y demás
htouvet escribió:
Código: Seleccionar todo
def my_get_version(soft):
print(u'Version installée: %s' % soft['version'])
return soft['version']
¿Qué debo enviar a esta función? (¿La variable "soft" es el nombre del software, su clave, la ubicación del ejecutable después de la instalación...?)
GRACIAS
Y.
Re: ¿Es posible ignorar los errores de versión?
Publicado: 17 de julio de 2018 - 14:05
por Eric
Buen día,
Encontré una función en setuphelpers que pareció responder mi pregunta:
obtener_propiedades_msi.
Entonces las cosas se volvieron sencillas:
Código: Seleccionar todo
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'])
Excepto que ahora se me permite un error:
Instalación de Sentinel Runtime
TypeError: 'el objeto Unicode no se puede llamar'
Y aquí, lo confieso, estoy empezando a quebrarme un poco...
Un consejo rápido para aquellos que aún no han pensado en probar setuphelpers en la consola:
En una consola de Python, un simple comando "import setuphelpers" funciona. Esto ahorra tiempo al probar el código

Lo sé, es una tontería, pero a veces no pensamos en las cosas simples y perdemos mucho tiempo...
Re: ¿Es posible ignorar los errores de versión?
Publicado: 18 de julio de 2018 - 12:22 p. m.
por Eric
Buen día,
Después de múltiples pruebas, errores, correcciones... aquí estoy.
Código: Seleccionar todo
# -*- 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)
En mi código anterior, tuve un error porque get_version esperaba un "objeto invocable" y no una "cadena", de ahí la función (no había entendido por qué estaba allí antes).
Ahora, se me permite cometer un error:
TypeError: el argumento 1 de MSIOpenDatabase() debe ser una cadena, no un diccionario
Intenté usar la función str() en mi función para solucionarlo, pero no funcionó.
Sigo enviando mensajes en botellas, esperando que algún día, uno de ellos inspire a alguien
Y.
Re: ¿Es posible ignorar los errores de versión?
Publicado: 18 de julio de 2018 - 22:56
por sfonteneau
En su caso, la prueba no es buena
El objetivo de esta maniobra es indicarle a wapt que no busque la versión del software en la clave de desinstalación del software sino en otro lugar.
get_version se utiliza para indicar a wapt el número de versión del software.
Ejemplo utilizando el software Naps:
Código: Seleccionar todo
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)
Se le indica a Wapt que recupere la versión del nombre del software.
En su código, va a recuperar el número de versión del archivo msi que está en el paquete, esto no tiene sentido.
Para resolver su problema, también puede simplemente modificar min_version llamando a install_msi_if... en lugar de usar get_version
https://github.com/tranquilit/WAPT/blob ... s.py#L3815
Re: ¿Es posible ignorar los errores de versión?
Publicado: 21 de julio de 2018 - 10:45 a. m.
por Eric
Hola,
gracias por tu respuesta.
De hecho, decidí empezar de cero y ya no tengo el problema del conflicto de versiones. Es bastante extraño; la única diferencia con mi script original es que no especifiqué `silent_options` en los parámetros (de hecho, `/q` y `/norestart` ya están configurados por defecto en `install_msi_if_needed`, lo noté en el código), y por eso funciona.
No puedo explicar por qué...
Debido a este problema, perdí bastante tiempo, pero adquirí muchos conocimientos sobre cómo funciona WAPT, gracias a mis pruebas y a tus respuestas, que me serán muy útiles más adelante.
.
Gracias