Pagina 2 di 2

Re: La sintassi per il nome del file... è errata

Pubblicato: 27 settembre 2018 - 17:12
di empbilly
Ho eseguito i test e quando eseguo un comando tramite psexec il risultato è quello mostrato nell'immagine sottostante.

authority nt\system

Immagine

https://ibb.co/iwCjWp (Non so perché l'immagine non venga visualizzata essendo racchiusa nel tag [img])

Re: La sintassi per il nome del file... è errata

Pubblicato: 27 settembre 2018 - 17:48
di dcardon
Ciao Elias,
empbilly ha scritto: 27 set 2018 - 17:12 Ho fatto i test e quando eseguo un cmd tramite psexec il risultato è quello mostrato nell'immagine sottostante.

authority nt\system

Immagine

https://ibb.co/iwCjWp (Non so perché l'immagine non venga visualizzata essendo nel tag [img])
Quindi in quel cmd.exe sei "Sistema locale" (è il vero account root su Windows). Ora devi solo eseguire la stessa riga di comando che hai inserito nel tuo

Codice: Seleziona tutto

setup.py
file e verificare se funziona correttamente.

Denis

Re: La sintassi per il nome del file... è errata

Pubblicato: 27 settembre 2018 - 21:18
di empbilly
dcardon,

Ho contattato l'azienda che ha sviluppato il software e mi è stata fornita un'altra variabile da rimuovere silenziosamente.

Codice: Seleziona tutto

C:\ProgramData\{5F3A4BBA-1519-45F2-9BF7-1E9924E32CAA}>"Surfer(11.1.719)_Installer.exe" REMOVE=TRUE MODIFY=FALSE UNINSTALL=TRUE /s
Quando si esegue questo comando in cmd tramite psexec.exe, un'altra finestra mostra che non è stato trovato alcun file o cartella.

Nella finestra viene visualizzato il messaggio seguente:
C:\Windows\system32\config\systemprofile\Desktop si riferisce a una posizione non disponibile. Potrebbe trovarsi su un disco rigido di questi computer o su una rete. Assicurati che il disco sia inserito correttamente o che tu sia connesso a Internet o alla rete e riprova. Se ancora non riesci a trovarlo, le informazioni potrebbero essere state spostate in un'altra posizione.
Solo dopo aver premuto OK la disinstallazione prosegue.

Il percorso C:\Windows\system32\config\systemprofile esiste, ma "Desktop" no.

Esiste un modo per simulare il clic OK?

Re: La sintassi per il nome del file... è errata

Pubblicato: 28 settembre 2018 - 15:07
di vcardon
empbilly ha scritto: 27 settembre 2018 - 21:18
C:\Windows\system32\config\systemprofile\Desktop si riferisce a una posizione non disponibile. Potrebbe trovarsi su un disco rigido di questi computer o su una rete. Assicurati che il disco sia inserito correttamente o che tu sia connesso a Internet o alla rete e riprova. Se ancora non riesci a trovarlo, le informazioni potrebbero essere state spostate in un'altra posizione.
Che ne dici di creare una cartella vuota C:\Windows\system32\config\systemprofile\Desktop nello script di installazione?

Se lo script di disinstallazione del software vuole rimuovere un file o una cartella e si blocca perché non trova il file, perché non crearlo e basta?.

WAPT è spesso utile per correggere problemi con gli script di installazione/rimozione di software commerciali.

Vincenzo

Re: La sintassi per il nome del file... è errata

Pubblicato: 28 settembre 2018 - 15:24
di dcardon
Ciao Elias,
empbilly ha scritto: 27 settembre 2018 - 21:18 Ho contattato l'azienda che ha sviluppato il software e mi è stata fornita un'altra variabile da rimuovere silenziosamente.

Codice: Seleziona tutto

C:\ProgramData\{5F3A4BBA-1519-45F2-9BF7-1E9924E32CAA}>"Surfer(11.1.719)_Installer.exe" REMOVE=TRUE MODIFY=FALSE UNINSTALL=TRUE /s
Quando si esegue questo comando in cmd tramite psexec.exe, un'altra finestra mostra che non è stato trovato alcun file o cartella.

Nella finestra viene visualizzato il messaggio seguente:
C:\Windows\system32\config\systemprofile\Desktop si riferisce a una posizione non disponibile. Potrebbe trovarsi su un disco rigido di questi computer o su una rete. Assicurati che il disco sia inserito correttamente o che tu sia connesso a Internet o alla rete e riprova. Se ancora non riesci a trovarlo, le informazioni potrebbero essere state spostate in un'altra posizione.
Solo dopo aver premuto OK la disinstallazione prosegue.

Il percorso C:\Windows\system32\config\systemprofile esiste, ma "Desktop" no.

Esiste un modo per simulare il clic OK?
Come ha detto Vincent in precedenza, creare in anticipo la cartella C:\Windows\system32\config\systemprofile\Desktop probabilmente risolverà il problema. Lo script di disinstallazione probabilmente tenta di rimuovere un'icona copiata durante l'installazione per fare un po' di pulizia, ma fallisce miseramente perché l'utente "Sistema locale" non ha una cartella del genere (C:\Windows\system32\config\systemprofile\ è il valore di %USERPROFILE% per "Sistema locale"). E questo spiega perché funzionava quando lo faceva in un contesto utente.

Nel tuo caso la disinstallazione non è riuscita perché le finestre pop-up venivano visualizzate sul buffer grafico non visibile del "Sistema locale".

Ora capisci perché usare

Codice: Seleziona tutto

psexec -i -s cmd.exe
è un buon modo per verificare il comportamento del programma di installazione.

La cosa migliore sarebbe che lo sviluppatore correggesse il suo script di installazione/disinstallazione!

Saluti,

Denis

Re: La sintassi per il nome del file... è errata

Pubblicato: 28 settembre 2018 - 19:29
di empbilly
Ciao vcardon e dcardon!! Grazie per tutto l'aiuto!!!

Funziona!!! :D

Non avevo pensato di creare la cartella per poi rimuoverla in seguito. 8-)

La sceneggiatura finale:

Codice: Seleziona tutto

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

uninstallkey = []

destdir = makepath(programfiles, "Golden Software", "Surfer 11")
exefile = "Surfer.exe"
inidir = "%s\\AppData\\Gradient.ini" % destdir
pstools = makepath(programfiles, "mspstools")

error_env = os.environ['WINDIR']
error_path = r'%s\system32\config\systemprofile\Desktop' % error_env

def install():
    if not os.path.isdir(error_path):
        os.makedirs(error_path)
    if os.path.exists(error_path):
        print("%s was success created!" % error_path)
    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 destdir and not 'UNINSTALL=YES' in cmd:
                    cmd = cmd + ' UNINSTALL=YES' + ' /s'
                    run(cmd)
            else:
                if not destdir and 'UNINSTALL=YES' in cmd:
                    run(cmd)
        except ValueError:
            pass
    print('Uninstalling old versions of Surfer completed!')
    print('Installing Surfer...')
    install_msi_if_needed('surfer.msi')
    if os.path.exists(destdir):
        filecopyto("Gradient.ini", "%s\\AppData" % destdir)
    if os.path.exists(inidir):
        print("Gradient.ini copied to the folder %s\\AppData" % destdir)
Se hai qualcosa da migliorare nello script, te ne sarei grato. Sto programmando in Python e non conosco ancora le best practice. Grazie!