Página 1 de 1

[RESUELTO] run_nofatal() nunca termina

Publicado: 7 de junio de 2024 - 17:58
por sebastien4444
Hola,

tengo un pequeño problema con esta función.

Necesito instalar un archivo desde un .exe, al cual debo proporcionar el parámetro /verysilent para la instalación silenciosa.
Dado que la función install_exe_if_needed no parece permitir agregar parámetros (como sí lo hace install_msi_if_needed con propiedades), estoy usando run_as_administrator(myfile.exe, params="/verysilent").

A continuación, necesito copiar archivos al directorio donde se instaló el software, por lo que la instalación debe estar completa para que exista la ruta de copia. Por lo tanto, estoy usando wait_uninstallkey_present() con la clave de desinstalación.

Finalmente, necesito ejecutar un archivo .exe ubicado en el directorio de instalación para iniciar el servicio en la PC.
Dado que este .exe no devuelve un código de salida, estoy usando run_nofatal() para evitar un error.

Mi problema es que mi archivo .exe se ejecuta correctamente porque veo que el servicio aparece en mi máquina, pero el print("starting OK") que agrego inmediatamente después nunca se muestra; Por lo tanto, la ejecución de la instalación nunca finaliza.

¿Acaso el propósito de esta función no es precisamente ejecutarse y salir sin esperar nada?

Re: run_nofatal() nunca termina

Publicado: 7 de junio de 2024 - 18:22
por sfonteneau
sebastien4444 escribió: 7 de junio de 2024 - 17:58 Dado que la función install_exe_if_needed no parece permitir agregar parámetros (como sí lo hace install_msi_if_needed con las propiedades), uso run_as_administrator(myfile.exe, params="/verysilent").
Puedes enviar tu archivo setup.py; eso será más sencillo

y si install_exe_if_needed permite agregar un argumento con silentflags:

Ejemplo con VLC:

Código: Seleccionar todo

    install_exe_if_needed("vlcsetup.exe",silentflags="/S",key="VLC media player",min_version="3.0.20")

run_as_administrator no debe usarse en paquetes ya que wapt inicia una cuenta del sistema y, por lo tanto, no es necesario.
solo usa ejecutar

Re: run_nofatal() nunca termina

Publicado: 10 de junio de 2024 - 11:25
por sebastien4444
Hola,

gracias por sus comentarios.

Efectivamente, durante la instalación no me había percatado de la presencia del parámetro `silencioso` en `install_exe_if_needed`. :ups:

Sin embargo, esto no resuelve mi problema al ejecutar el archivo .exe. :?

Al usar `run()` en lugar de `run_as_administrator()`, mi servicio se inicia (como cuando usaba `run_nofatal`), pero la ejecución del script se bloquea en esa línea y, por lo tanto, no finaliza (así que si compilo el paquete tal cual y lo implemento en un PC, la instalación nunca se completa).

Gracias de antemano por sus comentarios.

Re: run_nofatal() nunca termina

Publicado: 10 de junio de 2024 - 11:46
por sfonteneau
Puedes enviar tu archivo setup.py; eso será más sencillo ;)

Re: run_nofatal() nunca termina

Publicado: 11 de junio de 2024 - 09:44
por sebastien4444
Buen día,

Así es como se ve:

Código: Seleccionar todo

from setuphelpers import *

def install():
    install_exe = "UltraVNC Installer.exe"
    config_file = "ultravnc.ini"
    install_path = makepath("C:","Program Files","uvnc bvba","UltraVNC")
    service_path = makepath("C:","Program Files","uvnc bvba","UltraVNC","winvnc.exe")
    
    install_exe_if_needed(install_exe, , silentflags="/verysilent", key="Ultravnc2_is1")
   
    print("VNC installé")
   
    filecopyto(config_file, install_path)

    print("Config copiée")

    run(service_path)
    
    print("Service lancé")
El software se instala, el archivo de configuración se copia correctamente, el servicio se inicia correctamente pero nunca se llega a la declaración de impresión "Servicio iniciado" y el script solo finaliza después del tiempo de espera (y, por lo tanto, con un error).

Re: run_nofatal() nunca termina

Publicado: 13 de junio de 2024 - 11:29
por dcardon
Hola Sébastien,

es muy probable que la ejecución de "winvnc.exe" no esté devolviendo el control (básicamente, no se está ejecutando como un servicio) y, por lo tanto, la función run() no lo esté devolviendo. Tras el tiempo de espera, se detendrá el proceso ejecutable winvnc.exe y el paquete generará un error.

Probablemente exista una forma de declarar winvnc como un servicio y ejecutarlo como tal para evitar este problema de bloqueo.

Saludos,

Denis

Re: run_nofatal() nunca termina

Publicado: 14 de junio de 2024 - 11:46
por sebastien4444
Hola,

gracias por tu respuesta.

Sí, es eso, en cuanto se produce el error, el programa se detiene.

He probado diferentes funciones de Python de varias bibliotecas que permiten la ejecución de archivos, y no cambia nada.

Lo extraño es que ejecutar winvnc.exe desde la línea de comandos no causa este problema: el programa se inicia, aparece la línea de comandos casi al instante y el programa permanece activo.
Pensaba que las funciones de ejecución en Python eran lo mismo que ejecutar un comando en la línea de comandos.

Bueno, lo intentaré de otra manera. Gracias de nuevo.

Re: run_nofatal() nunca termina

Publicado: 14 de junio de 2024 - 12:35
por dcardon
Hola de nuevo Sébastien,

¿has echado un vistazo al paquete que tenemos en la tienda

https://wapt.tranquil.it/store/en/detai ... _PROD.wapt?

Si el objetivo es ejecutarlo como un servicio, esta es la mejor manera de hacerlo.

De lo contrario, si realmente necesitas replicar el comportamiento de ejecutar un comando en segundo plano, puedes consultar la línea de comandos "start".

Saludos cordiales,

Denis

Re: run_nofatal() nunca termina

Publicado: 14 de junio de 2024 - 15:50
por sebastien4444
¡Genial, gracias!

Al revisar el archivo setup.py de tu paquete, vi que necesitaba agregar el parámetro "-install" a la ejecución de winvnc.exe (que en realidad está en la documentación de "Línea de comandos" de UltraVNC, pero lo había pasado por alto :? ).

Re: run_nofatal() nunca termina

Publicado: 17 de junio de 2024 - 09:49
por dcardon
Hola Sébastien,

gracias por tus comentarios :-) . Me alegra que hayas encontrado una solución.

No dudes en recomendar WAPT; ¡también se difunde mucho de boca en boca :-) !

Un cordial saludo,

Denis