¿Es posible ignorar los errores de versión?

Preguntas sobre paquetes WAPT / Solicitudes y ayuda sobre paquetes WAPT.
Reglas del foro
Reglas del foro de la comunidad
* Soporte en inglés en www.reddit.com/r/wapt
* El soporte de la comunidad en francés está disponible en este foro
* Por favor, anteponga [RESUELTO] al título del tema si está resuelto.
* Por favor, no edite un tema que esté etiquetado como [RESUELTO]. Abra un nuevo tema haciendo referencia al anterior.
* Especifique la versión de WAPT instalada, la versión completa y el número de compilación (2.2.1.11957 / 2.2.2.12337 / etc.), así como la edición Enterprise/Discovery.
* Las versiones 1.8.2 y anteriores ya no son compatibles. Las únicas preguntas aceptadas sobre la versión 1.8.2 están relacionadas con la actualización a una versión compatible (2.1, 2.2, etc.).
* Especifique el sistema operativo del servidor (Linux/Windows) y la versión (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019).
* Especifique el sistema operativo de la máquina de administración/creación de paquetes y de la máquina con el agente problemático, si corresponde (Windows 7/10/11/Debian 11/etc.).
* Evite hacer varias preguntas al abrir un tema, ya que podría ser ignorado. Si hay varios temas, ábralos por separado, preferiblemente uno tras otro y no todos a la vez (es decir, no sature el foro con spam).
* Incluya fragmentos de código, capturas de pantalla y otras imágenes directamente en la publicación. Los enlaces a Pastebin, Bitly y otros sitios de terceros serán eliminados sistemáticamente.
* Como en cualquier foro comunitario, el soporte es proporcionado voluntariamente por los miembros. Si necesita soporte comercial, puede comunicarse con el departamento de ventas de Tranquil IT al 02.40.97.57.55.
Bloqueado
ericto
Mensajes: 56
Inscripción: 22 de diciembre de 2017 - 19:09

11 de julio de 2018 - 09:53

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
ericto
Mensajes: 56
Inscripción: 22 de diciembre de 2017 - 19:09

11 de julio de 2018 - 10:23

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`.
Avatar de usuario
htouvet
Experto en WAPT
Mensajes: 436
Inscripción: 16 de marzo de 2015 - 10:48
Contacto :

11 de julio de 2018 - 11:08

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)
TI tranquila
ericto
Mensajes: 56
Inscripción: 22 de diciembre de 2017 - 19:09

11 de julio de 2018 - 14:47

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.
ericto
Mensajes: 56
Inscripción: 22 de diciembre de 2017 - 19:09

17 de julio de 2018 - 14:05

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...
ericto
Mensajes: 56
Inscripción: 22 de diciembre de 2017 - 19:09

18 de julio de 2018 - 12:22

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.
Avatar de usuario
Sfonteneau
Experto en WAPT
Mensajes: 2312
Registrado: 10 de julio de 2014 - 23:52
Contacto :

18 de julio de 2018 - 22:56

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
ericto
Mensajes: 56
Inscripción: 22 de diciembre de 2017 - 19:09

21 de julio de 2018 - 10:45

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
Bloqueado