[RESUELTO] La sintaxis del nombre del archivo... es incorrecta

Comparta sus sugerencias o problemas relacionados con la consola WAPT o el agente WAPT aquí
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.
Empbilly
Mensajes: 79
Inscripción: 15 de enero de 2018 - 20:59

25 de septiembre de 2018 - 15:38

Hola,

Creé un paquete para instalar el software Surfer 11. En este paquete también programé la opción de desinstalar versiones antiguas antes de instalar la nueva.

Después de ejecutarlo en el cliente, la salida del comando muestra el siguiente error:

Código: Seleccionar todo

Uninstalling old versions of surfer...
CalledProcessErrorOutput: Command [u'"C:\\ProgramData\\{5F3A4BBA-1519-45F2-9BF7-1E9924E32CAA}\\Surfer(11.1.719)_Installer.exe" REMOVE=TRUE MODIFY=FALSE'] returned non-zero exit status 1.
The syntax for the file name, directory name, or volume label is incorrect.
Paquete:

Código: Seleccionar todo

# -*- coding: utf-8 -*-
from setuphelpers import *
import os

uninstallkey = []

destdir = makepath(programfiles, "Golden Software", "Surfer 11", "AppData")
filedir = "%s\\Gradient.ini" % destdir

def install():
    print('Uninstalling old versions of surfer...')
    for soft in installed_softwares('Surfer'):
        try:
            run(WAPT.uninstall_cmd(soft['key']))
        except ValueError:
            print('An error occured on Surfer unninstalling!')
    print('Uninstalling old versions of Surfer completed!')
    print('installing Surfer')
    install_msi_if_needed('surfer.msi')
    if os.path.exists(destdir):
        filecopyto("Gradient.ini", destdir)
    if os.path.exists(filedir):
        print("Gradient.ini copiado para %s" % destdir)
Avatar de usuario
htouvet
Experto en WAPT
Mensajes: 436
Inscripción: 16 de marzo de 2015 - 10:48
Contacto :

25 de septiembre de 2018 - 15:46

Hola,
Parece que uninstall_cmd devuelve una lista que no está dividida correctamente.
El comando "run" puede tener como primer argumento una lista o una cadena. En el caso de una lista, el primer miembro debe ser el ejecutable y los siguientes son los argumentos del comando.
Entonces, si obtiene [u'"C:\\ProgramData\\{5F3A4BBA-1519-45F2-9BF7-1E9924E32CAA}\\Surfer(11.1.719)_Installer.exe" REMOVE=TRUE MODIFY=FALSE'] como valor de retorno de uninstall_cmd (es decir, una lista con un solo miembro), una forma de solucionarlo es tomar el primer argumento como cmd

Código: Seleccionar todo

# -*- coding: utf-8 -*-
from setuphelpers import *
import os

uninstallkey = []

destdir = makepath(programfiles, "Golden Software", "Surfer 11", "AppData")
filedir = "%s\\Gradient.ini" % destdir

def install():
    print('Uninstalling old versions of surfer...')
    for soft in installed_softwares('Surfer'):
        try:
            cmd = WAPT.uninstall_cmd(soft['key'])
            if isinstance(cmd,list) and len(cmd) == 1:
                cmd = cmd[0]
            run(cmd)
        except ValueError:
            print('An error occured on Surfer unninstalling!')
    print('Uninstalling old versions of Surfer completed!')
    print('installing Surfer')
    install_msi_if_needed('surfer.msi')
    if os.path.exists(destdir):
        filecopyto("Gradient.ini", destdir)
    if os.path.exists(filedir):
        print("Gradient.ini copiado para %s" % destdir)
TI tranquila
Empbilly
Mensajes: 79
Inscripción: 15 de enero de 2018 - 20:59

25 de septiembre de 2018 - 17:05

Hola htouvet, ¡¡¡gracias por la respuesta!!!

Hice el cambio, pero se produjo un error de tiempo de espera.

Ejecuté una prueba en la mano con el siguiente comando y la eliminé silenciosamente.

Código: Seleccionar todo

C:\ProgramData\{5F3A4BBA-1519-45F2-9BF7-1E9924E32CAA}>"Surfer(11.1.719)_Installer.exe" REMOVE=TRUE SILENT=TRUE MODIFY=FALSE
¿Cómo puedo pasar esta opción SILENT=TRUE como argumento?
Avatar de usuario
htouvet
Experto en WAPT
Mensajes: 436
Inscripción: 16 de marzo de 2015 - 10:48
Contacto :

25 de septiembre de 2018 - 17:18

simplemente agréguelo al comando...

Código: Seleccionar todo

# -*- coding: utf-8 -*-
from setuphelpers import *
import os

uninstallkey = []

destdir = makepath(programfiles, "Golden Software", "Surfer 11", "AppData")
filedir = "%s\\Gradient.ini" % destdir

def install():
    print('Uninstalling old versions of surfer...')
    for soft in installed_softwares('Surfer'):
        try:
            cmd = WAPT.uninstall_cmd(soft['key'])
            if isinstance(cmd,list) and len(cmd) == 1:
                cmd = cmd[0]
            if not 'SILENT=TRUE' in cmd:
                cmd = cmd + ' SILENT=TRUE'
            run(cmd)
        except ValueError:
            print('An error occured on Surfer unninstalling!')
    print('Uninstalling old versions of Surfer completed!')
    print('installing Surfer')
    install_msi_if_needed('surfer.msi')
    if os.path.exists(destdir):
        filecopyto("Gradient.ini", destdir)
    if os.path.exists(filedir):
        print("Gradient.ini copiado para %s" % destdir)
TI tranquila
Empbilly
Mensajes: 79
Inscripción: 15 de enero de 2018 - 20:59

25 de septiembre de 2018 - 17:51

¡¡Fresco!!

Pero, si ejecuto manualmente vía cmd el comando:

Código: Seleccionar todo

C:\ProgramData\{5F3A4BBA-1519-45F2-9BF7-1E9924E32CAA}>"Surfer(11.1.719)_Installer.exe" REMOVE=TRUE MODIFY=FALSE SILENT=TRUE
se elimina muy rápido.

A través del script, se produce un error de tiempo de espera. Configuro un tiempo de espera de 180 segundos para la prueba.

Código: Seleccionar todo

Uninstalling old versions of surfer...
TimeoutExpired: Command '"C:\ProgramData\{5F3A4BBA-1519-45F2-9BF7-1E9924E32CAA}\Surfer(11.1.719)_Installer.exe" REMOVE=TRUE MODIFY=FALSE SILENT=TRUE' timed out after 180 seconds with output ''''
¿Algo anda mal con mi guión?
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 :

26 de septiembre de 2018 - 13:05

Hola Elías,
empbilly escribió: 25 de septiembre de 2018 - 17:51 Pero, si ejecuto manualmente vía cmd el comando:

Código: Seleccionar todo

C:\ProgramData\{5F3A4BBA-1519-45F2-9BF7-1E9924E32CAA}>"Surfer(11.1.719)_Installer.exe" REMOVE=TRUE MODIFY=FALSE SILENT=TRUE
se elimina muy rápido.

A través del script, se produce un error de tiempo de espera. Configuro un tiempo de espera de 180 segundos para la prueba.

Código: Seleccionar todo

Uninstalling old versions of surfer...
TimeoutExpired: Command '"C:\ProgramData\{5F3A4BBA-1519-45F2-9BF7-1E9924E32CAA}\Surfer(11.1.719)_Installer.exe" REMOVE=TRUE MODIFY=FALSE SILENT=TRUE' timed out after 180 seconds with output ''''
¿Algo anda mal con mi guión?
¿Observa este comportamiento al ejecutar el script en PyScripter o mediante WAPTService? Si funciona con PyScripter, podría deberse a que este comando se ejecuta en el contexto "Sistema local" (WaptService se ejecuta como "Sistema local").

Salud,

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
Empbilly
Mensajes: 79
Inscripción: 15 de enero de 2018 - 20:59

26 de septiembre de 2018 - 14:17

¿Observa este comportamiento al ejecutar el script en PyScripter o mediante WAPTService? Si funciona con PyScripter, podría deberse a que este comando se ejecuta en el contexto "Sistema local" (WaptService se ejecuta como "Sistema local").
Estoy ejecutando a través de WAPTService.

¿Hay alguna forma de solucionar este problema?
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 :

26 de septiembre de 2018 - 15:16

Hola Empbilly,
empbilly escribió: 26 de septiembre de 2018 - 14:17
¿Observa este comportamiento al ejecutar el script en PyScripter o mediante WAPTService? Si funciona con PyScripter, podría deberse a que este comando se ejecuta en el contexto "Sistema local" (WaptService se ejecuta como "Sistema local").
Estoy ejecutando a través de WAPTService.

¿Hay alguna forma de solucionar este problema?
Debería intentar ejecutar el binario de desinstalación en el contexto del "sistema local". Para ello, puede instalar tis-ms-pstools y ejecutarlo

Código: Seleccionar todo

psexec -i -s cmd.exe
Para obtener un shell como "sistema local". Puedes usar el

Código: Seleccionar todo

whoami
Para comprobar si realmente se está ejecutando como SISTEMA, ejecute el binario de desinstalación.
Si funciona, puedes intentar iniciar pyscripter como "sistema local" y ver si la instalación del paquete se realiza de la misma manera que en tu contexto de usuario.

Salud,

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
Empbilly
Mensajes: 79
Inscripción: 15 de enero de 2018 - 20:59

26 de septiembre de 2018 - 18:53

dcardon,

¿Cómo podría incluir "psexec..." en el script anterior?
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 :

26 de septiembre de 2018 - 19:44

Hola Elías,
empbilly escribió: 26 de septiembre de 2018 - 18:53 dcardon,

¿Cómo podría incluir "psexec..." en el script anterior?
No es necesario incluir psexec en setup.py. Psexec permite iniciar una sesión como "Sistema local" y comprobar si el comportamiento es diferente al instalar y desinstalar software.
Simplemente debe abrir un cmd.exe como administrador con privilegios elevados (puede verificarlo con
quién soy /grupos
que tienes el token de seguridad S-1-16-12288 al final de la lista). Luego escribes
psexec -i -s cmd.exe
y debería aparecer otro símbolo del sistema. En ese símbolo del sistema, puede escribir
¿Quién soy?
para verificar que realmente eres "Sistema local" y luego estás listo para ir y probar que el archivo exe de desinstalación se comporta correctamente en ese contexto.

Salud,

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
Bloqueado