Pagina 1 di 1

creare un pacchetto pronote

Pubblicato: 3 luglio 2022 - 16:55
di adgm11
Buongiorno
Voglio creare un pacchetto per installare il client Pronote (Index Education)
Ho quindi un file .exe e un file .iss per l'installazione e un altro per la disinstallazione. Il comando batch per avviare l'installazione invisibile su tutte le macchine è il seguente:

Codice: Seleziona tutto

\\serveur\pronote\Install_PRNclient_FR_win64.exe -s -f1\\serveur\pronote\ClientPRONOTE.iss
Per la disinstallazione, ecco i comandi

Codice: Seleziona tutto

"%ProgramFiles(x86)%\InstallShield Installation Information\{E20E5011-C887-40D8-8C26-99460A24F860}\setup.exe -s -uninst -f1\\serveur\pronote\uninstPRONOTE.iss
Come posso convertire questi comandi nel linguaggio Python in PyScripter per creare un pacchetto che consenta l'installazione e la disinstallazione?
GRAZIE

Re: Creazione di un pacchetto Pronote

Pubblicato: 3 luglio 2022 - 18:28
di adgm11
Bene, alla fine, dopo vari tentativi, sono riuscito a trovare i comandi che volevo e funzionano con pyscripter.
  • Per l'installazione, il comando 1 installa l'eseguibile utilizzando il file di risposta .iss creato in precedenza (vedere il sito web di indexeducation). Il comando 2 copia le impostazioni proxy. Il comando 3 copia le impostazioni client, inclusi la porta TCP, l'indirizzo del server indexeducation e il nome del client.
  • Per la disinstallazione, il comando 1 esegue la disinstallazione utilizzando il file di risposta alla disinstallazione .iss, il comando 2 elimina la cartella indexeducation che sembra rimanere e potrebbe causare problemi durante la reinstallazione.

Codice: Seleziona tutto

def install():
    run(r'"Install_PRNclient_FR_2021.0.2.8_win64.exe" -s -f1A:\waptdev\pkg-pronoteclient-wapt\ClientPRONOTE.iss')
    run(r'xcopy "A:\waptdev\pkg-pronoteclient-wapt\ConfigClientsHttp.xcfg" "C:\ProgramData\IndexEducation\Commun\" /y')
    run(r'xcopy "A:\waptdev\pkg-pronoteclient-wapt\Client PRONOTE.xcfg" "C:\ProgramData\IndexEducation\PRONOTE\CLIENT\VERSION 2021-0\FR\Installations\{90AAC525-F174-C243-EA1F-DCD1FD499401}\" /y')

def uninstall():
    run(r'"%ProgramFiles(x86)%\InstallShield Installation Information\{E20E5011-C887-40D8-8C26-99460A24F860}\setup.exe" -s -uninst -f1A:\waptdev\pkg-pronoteclient-wapt\uninstPRONOTE.iss')
    run(r'rd "C:\ProgramData\IndexEducation" /s /q')
Il problema è che quando distribuisco l'app su un PC, Wapt restituisce questo errore:

Codice: Seleziona tutto

CalledProcessErrorOutput: Command '"Install_PRNclient_FR_2021.0.2.8_win64.exe" -s -f1"ClientPRONOTE.iss"' returned non-zero exit status -2147213312.

Re: Creazione di un pacchetto Pronote

Pubblicato: 4 luglio 2022 - 13:29
di sfontenau
Ciao,


hai già dato un'occhiata alla discussione su Pronote presente in questo forum, che contiene un codice funzionante?

viewtopic.php?p=10396#p10396

Re: Creazione di un pacchetto Pronote

Pubblicato: 9 luglio 2022 - 15:36
di adgm11
In effetti, questo argomento è molto utile. Tuttavia, la versione globale non funziona; quella del primo post, con l'URL per il download e la creazione dei file .iss...

Pertanto, l'unica opzione praticabile è quella di posizionare i file .iss nella cartella del pacchetto, insieme ai file di configurazione .xcfg per il proxy e il server Index Education

Nel mio caso, sono riuscito a far funzionare l'installazione con questo comando:

Codice: Seleziona tutto

def install():
    run(r'"Install_PRNclient_FR_2021.0.2.8_win64.exe" -s -f1%s\installPRONOTE.iss' % basedir)
    import os
    os.system('taskkill /f /im "Client PRONOTE.exe"')
    shutil.copyfile('ConfigClientsHttp.xcfg','C:\ProgramData\IndexEducation\Commun\ConfigClientsHttp.xcfg')
    shutil.copyfile('Client PRONOTE.xcfg','C:\ProgramData\IndexEducation\PRONOTE\CLIENT\VERSION 2021-0\FR\Installations\{90AAC525-F174-C243-EA1F-DCD1FD499401}\Client PRONOTE.xcfg')
Per copiare i file di configurazione è necessario avviare il programma la prima volta (e poi interromperlo se necessario), altrimenti le directory non saranno disponibili.

L'unico problema è la disinstallazione: non riesco a farla funzionare. Ho usato questo comando:

Codice: Seleziona tutto

def uninstall():
    run(r'"C:\Program Files (x86)\InstallShield Installation Information\{E20E5011-C887-40D8-8C26-99460A24F860}\setup.exe" -s -uninst -f1%s\uninstPRONOTE.iss' % basedir)
Non capisco la differenza tra `remove` e `uninstall` in PyScripter. `remove` funziona correttamente nei pacchetti in cui viene iniettata una chiave di disinstallazione. Ma per Pronote è diverso e bisogna usare un file di risposta `.iss`. Come posso far funzionare il comando di disinstallazione in `def uninstall`? Perché in WAPT, quando provo a disinstallare il pacchetto su una macchina, Pronote non esegue la disinstallazione.
GRAZIE

Re: Creazione di un pacchetto Pronote

Pubblicato: 26 agosto 2022 - 15:05
di adgm11
Buongiorno
Ho creato il nuovo pacchetto con la versione 2022, avendo cura di modificare i valori della uninstallkey nei file .xcfg e nelle directory, che vengono rinominate
Il problema rimane che il comando di disinstallazione non funziona. Non so se l'installazione della nuova versione crea una nuova directory o sovrascrive quella vecchia.

E un altro problema ricorrente che non capisco. Quando eseguo l'installazione da PyScripter per testarla, funziona perfettamente sul PC che ospita la console Wapt. Ma se la distribuisco su altri PC, ottengo questo errore:

File "C:\Programmi (x86)\wapt\waptutils.py", riga 2126, in esecuzione
solleva CalledProcessErrorOutput(proc.returncode, cmd, ''.join(output))
waptutils.CalledProcessErrorOutput: il comando '"Install_PRNclient_FR_2022.0.2.1_win64.exe" -s -f1C:\\WINDOWS\\TEMP\\wapt4g0p39cy\\installPRONOTE.iss' ha restituito uno stato di uscita diverso da zero 1.
Output: '"Install_PRNclient_FR_2022.0.2.1_win64.exe"' non è riconosciuto come comando interno
o esterno, un programma eseguibile o un file batch.


Perché punta alla cartella sbagliata: -f1C:\\WINDOWS\\TEMP\\wapt4g0p39cy\\installPRONOTE.iss? Idealmente, il file installPRONOTE.iss dovrebbe essere recuperato dalla cartella del pacchetto in waptdev, dato che l'ho inserito lì. Come faccio a specificare questa cartella? Cosa significa la variabile %s? E che dire di %basedir?

Ecco il pacchetto:

Codice: Seleziona tutto

uninstallkey = ['{D1124ED8-514E-40BF-9021-D3B3CA941A53}']

def install():
    run(r'"Install_PRNclient_FR_2022.0.2.1_win64.exe" -s -f1%s\installPRONOTE.iss' % basedir)
    import time
    time.sleep(3)
    import os
    os.system('taskkill /f /im "Client PRONOTE.exe"')
    shutil.copyfile('ConfigClientsHttp.xcfg','C:\ProgramData\IndexEducation\Commun\ConfigClientsHttp.xcfg')
    shutil.copyfile('Client PRONOTE.xcfg','C:\ProgramData\IndexEducation\PRONOTE\CLIENT\VERSION 2022-0\FR\Installations\{EE26865C-1E0D-D13E-3DC3-DC89333D079B}\Client PRONOTE.xcfg')

def uninstall():
    run(r'"C:\Program Files (x86)\InstallShield Installation Information\{D1124ED8-514E-40BF-9021-D3B3CA941A53}\setup.exe" -s -uninst -f1%s\uninstPRONOTE.iss' % basedir)
    shutil.rmtree('C:\ProgramData\IndexEducation','ignore_errors=True')

Re: Creazione di un pacchetto Pronote

Pubblicato: 29 agosto 2022 - 10:28
di sfontenau
`basedir` non dovrebbe essere utilizzato durante la disinstallazione.

Infatti, quando viene eseguito `remove/uninstall`, il pacchetto non è più presente sul computer. (È stato rimosso durante l'installazione, quindi i file del pacchetto non sono più disponibili.)

Pertanto, è necessario copiare il file `uninstPRONOTE.iss` in un'altra posizione sul computer durante l'installazione per poterlo utilizzare durante la disinstallazione, oppure creare il file quando viene eseguito `def uninstall`.

Il pacchetto `msoffice` fa proprio questo. È possibile consultare il pacchetto per un esempio; crea il file solo durante la disinstallazione.

https://store.wapt.fr/store/details-tis ... 99489.wapt

Re: Creazione di un pacchetto Pronote

Pubblicato: 29 agosto 2022 - 11:56
di adgm11
Ok, grazie. Infatti, sul sito web di Pronote consigliano anche di copiare i file sul disco rigido locale
Ora l'installazione funziona correttamente copiando il file .iss in C::

Codice: Seleziona tutto

def install():
    shutil.copyfile('installPRONOTE.iss','C:\installPRONOTE.iss')
    run(r'Install_PRNclient_FR_2022.0.2.1_win64.exe -s -f1C:\installPRONOTE.iss')
    import time
    time.sleep(3)
    import os
    os.system('taskkill /f /im "Client PRONOTE.exe"')
    shutil.copyfile('ConfigClientsHttp.xcfg','C:\ProgramData\IndexEducation\Commun\ConfigClientsHttp.xcfg')
    shutil.copyfile('Client PRONOTE.xcfg','C:\ProgramData\IndexEducation\PRONOTE\CLIENT\VERSION 2022-0\FR\Installations\{EE26865C-1E0D-D13E-3DC3-DC89333D079B}\Client PRONOTE.xcfg')
Per disinstallare, presumo che sia sufficiente rimuovere la directory %basedir e copiare il file .iss sul disco locale. Il risultato sarà simile a questo:

Codice: Seleziona tutto

def uninstall():
    shutil.copyfile('uninstPRONOTE.iss','C:\uninstPRONOTE.iss')
    run(r'"C:\Program Files (x86)\InstallShield Installation Information\{D1124ED8-514E-40BF-9021-D3B3CA941A53}\setup.exe" -s -uninst -f1C:\uninstPRONOTE.iss')
    shutil.rmtree('C:\ProgramData\IndexEducation','ignore_errors=True')
    

Re: Creazione di un pacchetto Pronote

Pubblicato: 29 agosto 2022 - 14:49
di sfontenau
baseir può essere utilizzato durante l'installazione senza alcun problema

Il semplice utilizzo di `basedir` nella disinstallazione non darà accesso al file presente nel pacchetto

Codice: Seleziona tutto

import time
uninstallkey = []

def install():
   run(r'"Install_PRNclient_FR_2022.0.2.1_win64.exe" -s -f1%s\installPRONOTE.iss' % basedir)
   time.sleep(3)
   killalltasks('Client PRONOTE.exe')
    
   filecopyto('ConfigClientsHttp.xcfg',r'C:\ProgramData\IndexEducation\Commun\ConfigClientsHttp.xcfg')
   filecopyto('Client PRONOTE.xcfg',r'C:\ProgramData\IndexEducation\PRONOTE\CLIENT\VERSION 2022-0\FR\Installations\{EE26865C-1E0D-D13E-3DC3-DC89333D079B}\Client PRONOTE.xcfg')
   filecopyto("uninstPRONOTE.iss",r"c:\uninstPRONOTE.iss")

def uninstall():
    run(r'"C:\Program Files (x86)\InstallShield Installation Information\{D1124ED8-514E-40BF-9021-D3B3CA941A53}\setup.exe" -s -uninst -f1rc:\uninstPRONOTE.iss' )
    remove_tree(r'C:\ProgramData\IndexEducation')

Re: Creazione di un pacchetto Pronote

Pubblicato: 29 agosto 2022 - 16:17
di adgm11
Ok, con questo pacchetto funziona tutto perfettamente, grazie.
Solo un piccolo errore di battitura da correggere nel comando di disinstallazione:
-f1c:\uninstPRONOTE.iss.

I comandi filecopyto e shutil.copyfile fanno la stessa cosa? Tranne per il secondo, per il quale è necessario importare shutil.

Re: Creazione di un pacchetto Pronote

Pubblicato: 30 agosto 2022 - 09:41
di sfontenau
La funzione `filecopyto` proviene direttamente da setuphelpers di Wapt (clicca con il tasto CTRL sulla funzione nel tuo IDE per visualizzare direttamente il codice sottostante);

è una versione migliorata di `shutil.copyfile`.