[RISOLTO] La sintassi per il nome del file... è errata

Condividi qui i tuoi suggerimenti o problemi riguardanti la console WAPT o l'agente WAPT
Regole del forum
Regole del forum della community
* Supporto in inglese su www.reddit.com/r/wapt
* Supporto della community in francese disponibile su questo forum
* Si prega di anteporre [RISOLTO] al titolo dell'argomento se è stato risolto.
* Si prega di non modificare un argomento contrassegnato con [RISOLTO]. Aprire un nuovo argomento facendo riferimento a quello precedente.
* Specificare la versione di WAPT installata, la versione completa e il numero di build (2.2.1.11957 / 2.2.2.12337 / ecc.) nonché l'edizione Enterprise/Discovery.
* Le versioni 1.8.2 e precedenti non sono più supportate. Le uniche domande accettate relative alla versione 1.8.2 riguardano l'aggiornamento a una versione supportata (2.1, 2.2, ecc.).
* Specificare il sistema operativo del server (Linux/Windows) e la versione (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019).
* Specificare il sistema operativo della macchina di amministrazione/creazione dei pacchetti e della macchina con l'agente problematico, se applicabile (Windows 7/10/11/Debian 11/ecc.).
* Evitare di porre più domande quando si apre una discussione, altrimenti potrebbe essere ignorata. Se ci sono più discussioni, aprirle separatamente, preferibilmente una dopo l'altra e non tutte contemporaneamente (ovvero, non intasare il forum).
* Includere frammenti di codice, screenshot e altre immagini direttamente nel post. I link a Pastebin, Bitly e altri siti di terze parti verranno sistematicamente rimossi.
* Come in qualsiasi forum della community, il supporto è fornito volontariamente dai membri. Se si necessita di supporto commerciale, è possibile contattare il reparto vendite di Tranquil IT al numero 02.40.97.57.55
Empbilly
Messaggi: 79
Registrazione: 15 gennaio 2018 - 20:59

25 settembre 2018 - 15:38

Ciao,

Ho creato un pacchetto per installare il software Surfer 11. In questo pacchetto ho anche programmato l'opzione per disinstallare le vecchie versioni prima di installare quella nuova.

Dopo l'esecuzione sul client, l'output del comando mostra l'errore seguente:

Codice: Seleziona tutto

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.
Pacchetto:

Codice: Seleziona tutto

# -*- 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 utente
htouvet
Esperto WAPT
Messaggi: 436
Registrazione: 16 marzo 2015 - 10:48
Contatto:

25 settembre 2018 - 15:46

Ciao,
Sembra che uninstall_cmd restituisca un elenco non suddiviso correttamente.
Il comando run può avere come primo argomento una lista o una stringa str. Nel caso di una lista, il primo elemento della lista deve essere l'eseguibile e gli elementi successivi sono gli argomenti del comando.
Quindi se ottieni [u'"C:\\ProgramData\\{5F3A4BBA-1519-45F2-9BF7-1E9924E32CAA}\\Surfer(11.1.719)_Installer.exe" REMOVE=TRUE MODIFY=FALSE'] come valore di ritorno di uninstall_cmd (ovvero un elenco con un solo membro), un modo per aggirare il problema è prendere il primo argomento come cmd

Codice: Seleziona tutto

# -*- 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)
Tranquillo IT
Empbilly
Messaggi: 79
Registrazione: 15 gennaio 2018 - 20:59

25 settembre 2018 - 17:05

Ciao htouvet, grazie per la risposta!!!

Ho apportato la modifica, ma si è verificato un errore di timeout.

Ho eseguito un test sulla mano con il comando seguente e l'ho rimossa silenziosamente.

Codice: Seleziona tutto

C:\ProgramData\{5F3A4BBA-1519-45F2-9BF7-1E9924E32CAA}>"Surfer(11.1.719)_Installer.exe" REMOVE=TRUE SILENT=TRUE MODIFY=FALSE
Come posso passare questa opzione SILENT=TRUE come argomento?
Avatar utente
htouvet
Esperto WAPT
Messaggi: 436
Registrazione: 16 marzo 2015 - 10:48
Contatto:

25 settembre 2018 - 17:18

basta aggiungerlo al comando...

Codice: Seleziona tutto

# -*- 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)
Tranquillo IT
Empbilly
Messaggi: 79
Registrazione: 15 gennaio 2018 - 20:59

25 settembre 2018 - 17:51

Freddo!!

Ma se eseguo manualmente tramite cmd il comando:

Codice: Seleziona tutto

C:\ProgramData\{5F3A4BBA-1519-45F2-9BF7-1E9924E32CAA}>"Surfer(11.1.719)_Installer.exe" REMOVE=TRUE MODIFY=FALSE SILENT=TRUE
viene rimosso molto velocemente.

Tramite script, si verifica l'errore di timeout. Imposto un timeout di 180 secondi, a scopo di test.

Codice: Seleziona tutto

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 ''''
C'è qualcosa che non va nel mio script?
Avatar utente
dcardon
Esperto WAPT
Messaggi: 1908
Registrazione: 18 giugno 2014 - 09:58
Ubicazione: Saint Sébastien sur Loire
Contatto:

26 settembre 2018 - 13:05

Ciao Elias,
empbilly ha scritto: 25 settembre 2018 - 17:51 Ma se eseguo manualmente tramite cmd il comando:

Codice: Seleziona tutto

C:\ProgramData\{5F3A4BBA-1519-45F2-9BF7-1E9924E32CAA}>"Surfer(11.1.719)_Installer.exe" REMOVE=TRUE MODIFY=FALSE SILENT=TRUE
viene rimosso molto velocemente.

Tramite script, si verifica l'errore di timeout. Imposto un timeout di 180 secondi, a scopo di test.

Codice: Seleziona tutto

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 ''''
C'è qualcosa che non va nel mio script?
Si verifica questo comportamento quando si esegue lo script in PyScripter o tramite WAPTService? Se funziona tramite PyScripter, potrebbe essere un problema nell'esecuzione di questo comando nel contesto "Sistema locale" (WaptService viene eseguito come "Sistema locale").

Saluti,

Denis
Denis Cardon - Tranquil IT
Condividi le tue esperienze su WAPT! Inviaci gli URL dei tuoi blog e articoli nella "La tua opinione del forum e li pubblicheremo sul di WAPT
Empbilly
Messaggi: 79
Registrazione: 15 gennaio 2018 - 20:59

26 settembre 2018 - 14:17

Si verifica questo comportamento quando si esegue lo script in PyScripter o tramite WAPTService? Se funziona tramite PyScripter, potrebbe essere un problema nell'esecuzione di questo comando nel contesto "Sistema locale" (WaptService viene eseguito come "Sistema locale").
Sto utilizzando WAPTService.

C'è un modo per risolvere questo problema?
Avatar utente
dcardon
Esperto WAPT
Messaggi: 1908
Registrazione: 18 giugno 2014 - 09:58
Ubicazione: Saint Sébastien sur Loire
Contatto:

26 settembre 2018 - 15:16

Ciao Empbilly,
empbilly ha scritto: 26 settembre 2018 - 14:17
Si verifica questo comportamento quando si esegue lo script in PyScripter o tramite WAPTService? Se funziona tramite PyScripter, potrebbe essere un problema nell'esecuzione di questo comando nel contesto "Sistema locale" (WaptService viene eseguito come "Sistema locale").
Sto utilizzando WAPTService.

C'è un modo per risolvere questo problema?
Dovresti provare a eseguire il binario di disinstallazione nel contesto "sistema locale". Per farlo, puoi installare tis-ms-pstools ed eseguire

Codice: Seleziona tutto

psexec -i -s cmd.exe
per ottenere una shell come "sistema locale". È possibile utilizzare

Codice: Seleziona tutto

whoami
per verificare se stai davvero eseguendo il comando SYSTEM. Quindi esegui il file binario di disinstallazione.
Se funziona, puoi provare ad avviare pyscripter come "sistema locale" e verificare se l'installazione del pacchetto avviene nello stesso modo del tuo contesto utente.

Saluti,

Denis
Denis Cardon - Tranquil IT
Condividi le tue esperienze su WAPT! Inviaci gli URL dei tuoi blog e articoli nella "La tua opinione del forum e li pubblicheremo sul di WAPT
Empbilly
Messaggi: 79
Registrazione: 15 gennaio 2018 - 20:59

26 settembre 2018 - 18:53

dcardon,

come posso includere "psexec..." nello script qui sopra?
Avatar utente
dcardon
Esperto WAPT
Messaggi: 1908
Registrazione: 18 giugno 2014 - 09:58
Ubicazione: Saint Sébastien sur Loire
Contatto:

26 settembre 2018 - 19:44

Ciao Elias,
empbilly ha scritto: 26 settembre 2018 - 18:53 dcardon,

Come posso includere "psexec..." nello script qui sopra?
Non è necessario includere psexec in setup.py. Psexec consente di avviare una sessione come "Sistema locale" e verificare se il comportamento è diverso durante l'installazione e la disinstallazione del software.
Dovresti semplicemente aprire un cmd.exe come amministratore con privilegi elevati (puoi controllare con
whoami /gruppi
che hai il token di sicurezza S-1-16-12288 alla fine dell'elenco). Quindi digiti
psexec -i -s cmd.exe
e dovresti ottenere un altro prompt dei comandi. In quel prompt dei comandi puoi digitare
Ciao
per verificare che tu sia realmente un "Sistema locale" e poi sei pronto per testare che il file exe di disinstallazione si comporti correttamente in quel contesto.

Saluti,

Denis
Denis Cardon - Tranquil IT
Condividi le tue esperienze su WAPT! Inviaci gli URL dei tuoi blog e articoli nella "La tua opinione del forum e li pubblicheremo sul di WAPT
Bloccato