creare un pacchetto pronote

Domande sul packaging WAPT / Richieste e assistenza sui pacchetti 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
Bloccato
adgm11
Messaggi: 45
Registrazione: 12 aprile 2022 - 07:00

3 luglio 2022 - 16:55

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
adgm11
Messaggi: 45
Registrazione: 12 aprile 2022 - 07:00

3 luglio 2022 - 18:28

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.
Avatar utente
sfontenau
Esperto WAPT
Messaggi: 2312
Registrato: 10 luglio 2014 - 23:52
Contatto:

4 luglio 2022 - 13:29

Ciao,


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

viewtopic.php?p=10396#p10396
adgm11
Messaggi: 45
Registrazione: 12 aprile 2022 - 07:00

9 luglio 2022 - 15:36

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
adgm11
Messaggi: 45
Registrazione: 12 aprile 2022 - 07:00

26 agosto 2022 - 15:05

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')
Avatar utente
sfontenau
Esperto WAPT
Messaggi: 2312
Registrato: 10 luglio 2014 - 23:52
Contatto:

29 agosto 2022 - 10:28

`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
adgm11
Messaggi: 45
Registrazione: 12 aprile 2022 - 07:00

29 agosto 2022 - 11:56

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')
    
Avatar utente
sfontenau
Esperto WAPT
Messaggi: 2312
Registrato: 10 luglio 2014 - 23:52
Contatto:

29 agosto 2022 - 14:49

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')
adgm11
Messaggi: 45
Registrazione: 12 aprile 2022 - 07:00

29 agosto 2022 - 16:17

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.
Avatar utente
sfontenau
Esperto WAPT
Messaggi: 2312
Registrato: 10 luglio 2014 - 23:52
Contatto:

30 agosto 2022 - 09:41

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`.
Bloccato