Página 1 de 1
[RESUELTO] killalltasks no mata las tareas en ejecución
Publicado: 15 de febrero de 2023 - 17:21
por brice73
Buen día,
Tengo un problema con la función
matar todas las tareas que no permite que los procesos se finalicen durante la instalación de un paquete.
En la función def install() de un paquete de software portátil (Phyloboite.exe), el ejecutable de la aplicación se inicia con el siguiente comando:
La aplicación se inicia (en modo de compatibilidad con Windows XP Service Pack 3, según lo recomendado por el asistente de compatibilidad) y el script de instalación continúa, pero el comando `killalltasks` (aún dentro de `def install()`) no cierra la aplicación. Además, la función `isrunning` aplicada a cada tarea no devuelve "True".
La variable global tasktokill se define en setup.py de la siguiente manera:
y la función killalltasks se llama así:
Sin embargo, al abrir el administrador de tareas se muestra claramente la ejecución de los dos procesos 'Phyloboite.exe' y '_Phylo00.exe', y abriendo manualmente una ventana del símbolo del sistema DOS, es posible matar manualmente estas dos tareas.
¿El problema podría estar relacionado con el modo de compatibilidad que inicia la instalación en pantalla completa y te hace perder el control de todo lo demás (barra de tareas, botón de inicio...)?
WAPT Enterprise 2.3.0.13505
Servidor WAPT con Ubuntu 20.04
Administración/creación de paquetes en Windows 10
Re: killalltasks no mata las tareas en ejecución
Publicado: 16 de febrero de 2023 - 18:07
por dcardon
Hola Brice,
para aislar mejor el problema:
* ¿Podrías intentar finalizarlo desde PyScripter para ver si es un problema de contexto?
* ¿Podrías intentar finalizarlo desde la línea de comandos con `taskkill /f /im myprogram.exe`?
Gracias,
Denis
Re: killalltasks no mata las tareas en ejecución
Publicado: 17 de febrero de 2023 - 13:13
por brice73
Hola Denis,
Al ejecutarse el programa Phyloboite.exe, se inicia el proceso _Phylo00.exe. Puedo eliminar ambos procesos eliminando el proceso hijo _Phylo00.exe, ya sea mediante el símbolo del sistema o en el intérprete de línea de comandos de PyScripter con killalltasks. (Para ello, debo usar el Administrador de tareas, minimizar el proceso que, una vez iniciado, ocupa toda la pantalla y no una ventana, y luego iniciar el símbolo del sistema o PyScripter).
El problema principal es que la aplicación portátil que quiero implementar (Phyloboite.exe) requiere privilegios de administrador para ejecutarse. Para solucionarlo, creé una clave de registro en la función install() para que todos los usuarios puedan ejecutar la aplicación con privilegios de administrador y en modo de compatibilidad con Windows XP SP3
Código: Seleccionar todo
registry_setstring(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers","C:\AppsPortables\Phyloboite\Phyloboite.exe","~ RUNASADMIN WINXPSP3 RUNASINVOKER", type=REG_SZ)
El problema es que, a pesar de esto, una vez que la aplicación se implementa en las estaciones de trabajo, en realidad es necesario abrir la aplicación una vez con una cuenta de administrador antes de que los usuarios puedan iniciar la aplicación con derechos de administrador.
Para evitar este problema con el Control de Cuentas de Usuario (UAC), intenté abrir y cerrar la aplicación durante la instalación. Tras varios intentos, y debido a la inoperancia de `killalltasks` en `install()`, creé un archivo ejecutable (a partir de un archivo .bat) que realiza esta acción y se inicia durante la instalación (dentro de la función `install()`). Las pruebas de instalación/desinstalación con PyScripter no muestran problemas particulares; la aplicación se abre durante unos segundos (3), se cierra y la instalación se completa. Sin embargo, tras una prueba de implementación real con las máquinas apagadas, la instalación de la aplicación no se completa y parece ejecutarse indefinidamente.
¿Tiene alguna solución a este problema de una aplicación portátil que requiere derechos de administrador para ejecutarse?
ps1: Para su información, el archivo .bat desde el cual se crea el archivo .exe contiene los siguientes comandos:
Código: Seleccionar todo
start C:\AppsPortables\Phyloboite\Phyloboite.exe && timeout /t 3 && taskkill /f /im "_Phylo00.exe"
(ps2: otra cosa curiosa es que la función killalltasks efectivamente mata el proceso _Phylo00.exe que se está ejecutando durante la desinstalación cuando se llama a la función uninstall()).
gracias de antemano
Re: killalltasks no mata las tareas en ejecución
Publicado: 17 de febrero de 2023 - 14:27
por dcardon
Hola Brice,
No tengo una respuesta a su problema, sin embargo, como una posible vía de investigación, debería intentar instalarlo en una cuenta de SISTEMA local, que es utilizada por el agente WAPT en la máquina para ver cómo se comporta.
Para realizar la prueba, puede instalar el paquete tis-sysinternals-pstools y ejecutar
Luego, realice la instalación en este cmd.exe. Una diferencia importante entre la cuenta de administrador local y la cuenta de sistema local es que este último no tiene un escritorio predeterminado. Esto puede provocar el mal funcionamiento de algunos instaladores o software mal escritos.
Respecto al problema del lanzamiento como administrador, le aconsejo que verifique qué archivos realmente necesitan acceso de lectura y escritura para el software en cuestión utilizando un explorador de procesos o equivalente, y que configure las ACL correctas en los archivos/directorios/claves de registro correspondientes.
Atentamente,
Denis
Re: killalltasks no mata las tareas en ejecución
Publicado: 17 de febrero de 2023 - 14:44
por brice73
Hola Denis,
gracias por tu consejo, que intentaré analizar más a fondo.
Mientras probaba otra cosa en la máquina de prueba, me di cuenta de que, a pesar de que el agente WAPT no se apagaba durante la instalación de la aplicación Phyloboite (terminé cancelando la tarea después de unos diez minutos, ya que era un paquete de menos de 10 MB), parece que la aplicación se instaló correctamente y pude ejecutarla directamente con una cuenta de usuario actual. Sin embargo, el paquete sigue mostrando un error/necesita instalación, y el agente WAPT no se apaga cuando se apaga la máquina mientras se está ejecutando la instalación, por lo que el procedimiento de instalación y despliegue no funciona...
Saludos cordiales,
Re: killalltasks no mata las tareas en ejecución
Publicado: 17 de febrero de 2023 - 16:27
por dcardon
Hola Brice,
la función `run()` tiene un tiempo de espera, lo que significa que después de cierto tiempo finaliza todo lo que se haya iniciado y devuelve un código de error.
Saludos,
Denis
Re: killalltasks no mata las tareas en ejecución
Publicado: 23 de febrero de 2023 - 18:07
por brice73
Finalmente, la instalación del paquete funcionó; el archivo .exe abrió y cerró la aplicación durante la instalación, solucionando así el problema de UAC.

Es posible que el problema de instalación se debiera a una conexión de red lenta en una de las máquinas de prueba. El software se implementó correctamente en numerosas máquinas y los pocos errores de instalación se resolvieron fácilmente reiniciando el programa.
Re: killalltasks no mata las tareas en ejecución
Publicado: 24 de febrero de 2023 - 09:42
por dcardon
Hola Brice,
gracias por tus comentarios. Respecto al problema de lentitud de la red, ¿te refieres a que el instalador se conecta a un recurso de red para completar la instalación? Si es posible, se recomienda usar paquetes WAPT autocontenidos para evitar este tipo de problemas (es decir, que todo esté incluido en el paquete). El agente WAPT descarga los paquetes y los almacena en caché durante el día (cada 1,5 horas) y los instala cuando se apaga el equipo o cuando se solicita. Esto evita problemas de conectividad de red durante la instalación.
Marco el tema como resuelto.
Saludos cordiales,
Denis
Re: [RESUELTO] killalltasks no mata las tareas en ejecución
Publicado: 26 de febrero de 2023 - 14:30
por brice73
Hola Denis,
inicialmente no marqué la casilla de descarga del paquete durante la actualización del cliente, y una máquina de prueba tenía una conexión de red limitada y muy lenta. Los primeros intentos de instalación fallaron. Al habilitar la descarga del paquete y aumentar el tiempo de espera (el del archivo .exe creado a partir del archivo por lotes), y al probar en otra máquina, la instalación funcionó.
Saludos,