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
¿Es posible ignorar los errores de versión?
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.
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.
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`.
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`.
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
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
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áshtouvet escribió: Sospecho que una de las versiones está en 3 componentes "1.2.3" y la otra en 4 "1.2.3.0".
¿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...?)htouvet escribió:Código: Seleccionar todo
def my_get_version(soft): print(u'Version installée: %s' % soft['version']) return soft['version']
GRACIAS
Y.
Buen día,
Encontré una función en setuphelpers que pareció responder mi pregunta:
obtener_propiedades_msi.
Entonces las cosas se volvieron sencillas:
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...
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'])
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...
Buen día,
Después de múltiples pruebas, errores, correcciones... aquí estoy.
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.
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)
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.
- Sfonteneau
- Experto en WAPT
- Mensajes: 2312
- Registrado: 10 de julio de 2014 - 23:52
- Contacto :
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:
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
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)
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
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
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
