[RESUELTO] Uso de la función start_interactive_process para la interacción del usuario durante la implementació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
fobriano
Mensajes: 21
Inscripción: 26 de septiembre de 2024 - 09:35

5 de diciembre de 2024 - 10:12 a. m

Buen día,

Me tomo la libertad de plantear este tema a continuación de la publicación (viewtopic.php?p=14558#p14558) que había abierto respecto a la posible interacción con los usuarios al momento de desplegar un paquete con WAPT.

Lamentablemente, aunque mi línea de comando que llamaba a un script externo de PowerShell y permitía que se mostrara una ventana emergente al usuario funcionó perfectamente al realizar pruebas locales con PyScripter, fue una historia completamente diferente al implementar el paquete a través de WAPT porque no se mostró nada.

Entonces quería adaptar esta llamada de script de PowerShell usando la función iniciar_proceso_interactivo como había indicado Simon, logré construir la siguiente línea de comando que funciona perfectamente localmente con PyScripter:

Código: Seleccionar todo

notification_folder = makepath(basedir, "Notification")

for session_id in get_active_sessions():
	popup=notification_folder + "\\PsExec.exe"
        popup_command_exec="-s powershell.exe " + notification_folder + "\\ServiceUI.exe C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe -NoLogo -Noprofile -WindowStyle Hidden -file " + notification_folder + "\\Notification.ps1 -config " + notification_folder + "\\upgrade.xml"
        start_interactive_process(popup, popup_command_exec, session_id=session_id,minimize=True)
Sin embargo, si publico el paquete y pruebo la implementación en una computadora, aparece este mensaje de error:

Imagen

Sin embargo, el directorio en cuestión está completamente vacío porque creo que el paquete lo utiliza solo ocasionalmente y temporalmente (especifico que todos los archivos necesarios están presentes en el directorio del paquete desde el principio).

Mi pregunta es: ¿es normal este fenómeno y cuál es la función? iniciar_proceso_interactivo ¿Es capaz de acceder a archivos desde el directorio nativo del paquete?

Gracias de antemano.

Fred
Avatar de usuario
dcardón
Experto en WAPT
Mensajes: 1908
Inscripción: 18 de junio de 2014 - 09:58
Ubicación: Saint Sébastien sur Loire
Contacto :

5 de diciembre de 2024 - 10:53

Hola Frédéric,

imagino que estás llamando a esta función dentro de la función `install()` (lo ideal es usar el script completo si es posible). El contenido del paquete se descomprime en un directorio temporal en `%TEMP%`. Si `psexec.exe` está presente en el paquete, se descomprimirá en el directorio temporal. Sin embargo, este es un archivo que la mayoría de los antivirus eliminan automáticamente, así que deberías comprobarlo primero...

Saludos,

Denis
Denis Cardon - Tranquil IT
¡Comparte tus experiencias en WAPT! Envíanos las URL de tus blogs y artículos en la "Tu opinión del foro y los publicaremos en el de WAPT
fobriano
Mensajes: 21
Inscripción: 26 de septiembre de 2024 - 09:35

6 de diciembre de 2024 - 15:48

Hola Denis,

Gracias por tu respuesta.
De hecho, el script se ejecuta en la parte def instalar(): Y aquí está el código completo:

Código: Seleccionar todo

def install():

	notification_folder = makepath(basedir, "Notification")

	for session_id in get_active_sessions():
		popup=notification_folder + "\\PsExec.exe"
        	popup_command_exec="-s powershell.exe " + notification_folder + "\\ServiceUI.exe C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe -NoLogo -Noprofile -WindowStyle Hidden -file " + notification_folder + "\\Notification.ps1 -config " + notification_folder + "\\upgrade.xml"
        	start_interactive_process(popup, popup_command_exec, session_id=session_id,minimize=True)
        
        sys.exit(0)
Intenté en paralelo crear un directorio accesible para todos los usuarios localmente, copiar en él los ejecutables necesarios (incluido "PsExec.exe") y luego llamarlo desde mi script de Python.
El script funciona perfectamente desde PyScripter, el directorio se crea correctamente y los archivos no son eliminados por el antivirus.

Sin embargo, tampoco funciona cuando se ejecuta como paquete.

¿Hay algunos puntos específicos a tener en cuenta con la función? iniciar_proceso_interactivo ?

Gracias de antemano.

Fred
fobriano
Mensajes: 21
Inscripción: 26 de septiembre de 2024 - 09:35

10 de diciembre de 2024 - 16:21

Hola,

finalmente logré resolver el problema cambiando la sintaxis de la línea de comandos, y ahora la notificación se muestra correctamente en el contexto del usuario.
Sin embargo, opté por una tarea programada y efímera para evitar usar los procesos "PsExec.exe" y "ServiceUI.exe", que a veces son malinterpretados por los EDR en cuanto a su comportamiento.

Fred
luc91
Mensajes: 7
Inscripciones: 11 Oct 2025 - 16:05 horas.

12 de enero de 2026 - 23:58

Creo que tu solución con la tarea programada fue más sencilla al final. Evita los problemas con PsExec y ServiceUI, especialmente con software antivirus o EDR que pueden bloquearlos.
Bloqueado