Pagina 1 di 1

[RISOLTO] run_nofatal() non finisce mai

Pubblicato: 7 giugno 2024 - 17:58
di sebastien4444
Ciao,

ho un piccolo problema con questa funzione.

Devo installare un file da un .exe, per il quale devo fornire il parametro /verysilent per l'installazione silenziosa.
Poiché la funzione install_exe_if_needed non sembra consentire l'aggiunta di parametri (come invece fa install_msi_if_needed con le proprietà), sto usando run_as_administrator(myfile.exe, params="/verysilent").

Successivamente, devo copiare i file nella directory in cui è stato installato il software, quindi l'installazione deve essere completa affinché il percorso di copia esista. Pertanto, sto usando wait_uninstallkey_present() con la chiave di disinstallazione.

Infine, devo avviare un file .exe situato nella directory di installazione per avviare il servizio sul PC.
Poiché questo .exe non restituisce un codice di uscita, sto usando run_nofatal() per evitare un errore.

Il mio problema è che il mio file .exe viene eseguito correttamente perché vedo il servizio comparire sul mio computer, ma il print("avvio OK") che aggiungo subito dopo non viene mai visualizzato; Pertanto, l'esecuzione dell'installazione non termina mai.

Lo scopo di questa funzione non è forse proprio quello di essere eseguita e terminare senza attendere nulla?

Re: run_nofatal() non finisce mai

Pubblicato: 7 giugno 2024 - 18:22
di sfontenau
sebastien4444 ha scritto: 7 giugno 2024 - 17:58 Poiché la funzione install_exe_if_needed non sembra consentire l'aggiunta di parametri (come invece fa install_msi_if_needed con le proprietà), utilizzo run_as_administrator(myfile.exe, params="/verysilent").
Puoi inviare il tuo file setup.py; sarà più semplice

e se install_exe_if_needed consente di aggiungere un argomento con silentflags:

Esempio con VLC:

Codice: Seleziona tutto

    install_exe_if_needed("vlcsetup.exe",silentflags="/S",key="VLC media player",min_version="3.0.20")

run_as_administrator non dovrebbe essere utilizzato nei pacchetti poiché wapt avvia un account di sistema e quindi non è necessario.
usa semplicemente run

Re: run_nofatal() non finisce mai

Pubblicato: 10 giugno 2024 - 11:25
di sebastien4444
Salve,

grazie per il suo feedback.

In effetti, durante l'installazione non avevo notato la presenza del parametro `silent` in `install_exe_if_needed`. :oops:

Tuttavia, questo non risolve il mio problema con l'avvio del file .exe. :?

Utilizzando `run()` invece di `run_as_administrator()`, il mio servizio si avvia (come quando utilizzavo `run_nofatal`), ma l'esecuzione dello script si blocca a quella riga e quindi non termina (pertanto, se compilo il pacchetto così com'è e lo distribuisco su un PC, l'installazione non viene mai completata).

La ringrazio in anticipo per il suo feedback.

Re: run_nofatal() non finisce mai

Pubblicato: 10 giugno 2024 - 11:46
di sfontenau
Puoi inviare il tuo file setup.py; sarà più semplice ;)

Re: run_nofatal() non finisce mai

Pubblicato: 11 giugno 2024 - 09:44
di sebastien4444
Buongiorno,

Ecco come appare:

Codice: Seleziona tutto

from setuphelpers import *

def install():
    install_exe = "UltraVNC Installer.exe"
    config_file = "ultravnc.ini"
    install_path = makepath("C:","Program Files","uvnc bvba","UltraVNC")
    service_path = makepath("C:","Program Files","uvnc bvba","UltraVNC","winvnc.exe")
    
    install_exe_if_needed(install_exe, , silentflags="/verysilent", key="Ultravnc2_is1")
   
    print("VNC installé")
   
    filecopyto(config_file, install_path)

    print("Config copiée")

    run(service_path)
    
    print("Service lancé")
Il software viene installato, il file di configurazione viene copiato correttamente, il servizio si avvia correttamente ma l'istruzione di stampa "Service started" non viene mai raggiunta e lo script termina solo dopo il timeout (e quindi con un errore).

Re: run_nofatal() non finisce mai

Pubblicato: 13 giugno 2024 - 11:29
di dcardon
Ciao Sébastien,

è molto probabile che l'esecuzione di "winvnc.exe" non restituisca il controllo (in pratica, non viene eseguito come servizio) e quindi la funzione run() non restituisce il controllo. Dopo il timeout, terminerà il processo winvnc.exe e il pacchetto andrà in errore.

Probabilmente esiste un modo per dichiarare winvnc come servizio ed eseguirlo come tale per evitare questo problema di blocco.

Cordiali saluti,

Denis

Re: run_nofatal() non finisce mai

Pubblicato: 14 giugno 2024 - 11:46
di sebastien4444
Ciao,

grazie per la risposta.

Sì, è proprio così, non appena si verifica l'errore, il programma si arresta.

Ho provato diverse funzioni Python di varie librerie che consentono l'esecuzione di file, ma non cambia nulla.

La cosa strana è che l'avvio di winvnc.exe tramite il prompt dei comandi non causa questo problema: il programma si avvia, il prompt compare quasi immediatamente e il programma rimane attivo.
Pensavo che le funzioni di esecuzione in Python fossero equivalenti all'avvio di un comando cmd.

Vabbè, troverò un altro modo. Grazie ancora.

Re: run_nofatal() non finisce mai

Pubblicato: 14 giugno 2024 - 12:35
di dcardon
Ciao di nuovo Sébastien,

hai dato un'occhiata al pacchetto che abbiamo nello store

https://wapt.tranquil.it/store/en/detai ... _PROD.wapt?

Se l'obiettivo è eseguirlo come servizio, questo è il modo migliore per farlo.

Altrimenti, se hai davvero bisogno di replicare il comportamento di avvio di un comando in background, puoi dare un'occhiata al comando da riga di comando "start".

Cordiali saluti,

Denis

Re: run_nofatal() non finisce mai

Pubblicato: 14 giugno 2024 - 15:50
di sebastien4444
Ottimo, grazie!

Esaminando il file setup.py nel tuo pacchetto, ho notato che dovevo aggiungere il parametro "-install" all'esecuzione di winvnc.exe (che in realtà è presente nella documentazione "Riga di comando" di UltraVNC, ma mi era sfuggito :? ).

Re: run_nofatal() non finisce mai

Pubblicato: 17 giugno 2024 - 09:49
di dcardon
Ciao Sébastien,

grazie per il tuo feedback :-) . Sono contento che tu abbia trovato una soluzione.

Sentiti libero di parlare di WAPT; si diffonde molto anche con il passaparola :-) !

Cordiali saluti,

Denis