Página 1 de 1

crear paquete pronote

Publicado: 3 de julio de 2022 - 16:55
por adgm11
Buen día
Quiero crear un paquete para instalar el cliente Pronote (Index Education)
Por lo tanto, tengo un archivo .exe y un archivo .iss para la instalación y otro para la desinstalación. El comando por lotes para iniciar la instalación silenciosa en todas las máquinas es el siguiente:

Código: Seleccionar todo

\\serveur\pronote\Install_PRNclient_FR_win64.exe -s -f1\\serveur\pronote\ClientPRONOTE.iss
Para la desinstalación, aquí están los comandos

Código: Seleccionar todo

"%ProgramFiles(x86)%\InstallShield Installation Information\{E20E5011-C887-40D8-8C26-99460A24F860}\setup.exe -s -uninst -f1\\serveur\pronote\uninstPRONOTE.iss
¿Cómo puedo convertir estos comandos al lenguaje Python en PyScripter para crear un paquete que permita la instalación y desinstalación?
GRACIAS

Re: Creación de un paquete de Pronote

Publicado: 3 de julio de 2022 - 18:28
por adgm11
Bueno, finalmente después de varios intentos terminé encontrando los comandos que quería, y funciona desde pyscripter.
  • Para la instalación, el comando 1 instala el ejecutable usando el archivo de respuesta .iss creado previamente (consulte el sitio web de indexeducation). El comando 2 copia la configuración del proxy. El comando 3 copia la configuración del cliente, incluyendo el puerto TCP, la dirección del servidor indexeduc y el nombre del cliente.
  • Para la desinstalación, el comando 1 desinstala utilizando el archivo de respuesta de desinstalación .iss, el comando 2 elimina la carpeta indexeducation que parece permanecer y puede causar problemas para una reinstalación.

Código: Seleccionar todo

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')
El problema es que cuando implemento la aplicación en una PC, Wapt devuelve este error:

Código: Seleccionar todo

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

Re: Creación de un paquete de Pronote

Publicado: 4 de julio de 2022 - 13:29
por sfonteneau
Hola, ¿


has consultado el tema de Pronote que ya existe en este foro y que contiene un código que funciona?

viewtopic.php?p=10396#p10396

Re: Creación de un paquete de Pronote

Publicado: 9 de julio de 2022 - 15:36
por adgm11
Este tema es muy útil. Sin embargo, la versión global no funciona; la de la primera publicación, con la URL de descarga y la creación de los archivos .iss...

Por lo tanto, la única opción viable es colocar los archivos .iss en la carpeta del paquete, junto con los archivos de configuración .xcfg para el proxy y el servidor Index Education

En mi caso, pude hacer que la instalación funcionara con este comando:

Código: Seleccionar todo

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')
Debe iniciar el programa la primera vez (y luego detenerlo si es necesario) para poder copiar los archivos de configuración; de lo contrario, los directorios no estarán disponibles.

El único problema es la desinstalación; no consigo que funcione. Usé este comando:

Código: Seleccionar todo

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)
No entiendo la diferencia entre `remove` y `uninstall` en PyScripter. `remove` funciona correctamente en paquetes donde se inyecta una clave de desinstalación. Pero para Pronote, es diferente y hay que usar un archivo de respuesta `.iss`. ¿Cómo puedo hacer que funcione el comando de desinstalación en `def uninstall`? Porque en WAPT, cuando intento desinstalar el paquete en una máquina, Pronote no lo desinstala.
GRACIAS

Re: Creación de un paquete de Pronote

Publicado: 26 de agosto de 2022 - 15:05
por adgm11
Buen día
He creado el nuevo paquete con la versión 2022, teniendo cuidado de modificar los valores de la clave de desinstalación en los archivos .xcfg y los directorios, los cuales están siendo renombrados
El problema persiste: el comando de desinstalación no funciona. No sé si la instalación de la nueva versión crea un nuevo directorio o sobrescribe el anterior.

Y otro problema recurrente que no entiendo. Cuando ejecuto la instalación desde PyScripter para probar, funciona perfectamente en el PC que aloja la consola Wapt. Pero si la implemento en otros PC, me aparece este error:

Archivo "C:\Archivos de programa (x86)\wapt\waptutils.py", línea 2126, en ejecución
generar CalledProcessErrorOutput(proc.returncode, cmd, ''.join(salida))
waptutils.CalledProcessErrorOutput: El comando '"Install_PRNclient_FR_2022.0.2.1_win64.exe" -s -f1C:\\WINDOWS\\TEMP\\wapt4g0p39cy\\installPRONOTE.iss' devolvió un estado de salida distinto de cero 1.
Salida: '"Install_PRNclient_FR_2022.0.2.1_win64.exe"' no se reconoce como un comando interno
o externo, un programa ejecutable o un archivo por lotes.


¿Por qué apunta a la carpeta incorrecta: -f1C:\\WINDOWS\\TEMP\\wapt4g0p39cy\\installPRONOTE.iss? Idealmente, el archivo installPRONOTE.iss debería obtenerse de la carpeta del paquete en waptdev, ya que lo coloqué allí. ¿Cómo especifico esta carpeta? ¿Qué significa la variable %s? ¿Y qué hay de %basedir?

Aquí está el paquete:

Código: Seleccionar todo

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: Creación de un paquete de Pronote

Publicado: 29 de agosto de 2022 - 10:28
por sfonteneau
No se debe usar `basedir` para desinstalar.

De hecho, cuando se ejecuta `remove/uninstall`, el paquete ya no está presente en el equipo. (Se eliminó durante la instalación, por lo que los archivos del paquete ya no están disponibles).

Por lo tanto, debe copiar el archivo `uninstPRONOTE.iss` a otra ubicación del equipo durante la instalación para usarlo durante la desinstalación, o crear el archivo cuando se ejecuta `def uninstall`.

El paquete `msoffice` hace esto. Puede consultar el paquete para ver un ejemplo; crea el archivo solo durante la desinstalación.

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

Re: Creación de un paquete de Pronote

Publicado: 29 de agosto de 2022 - 11:56
por adgm11
Bien, gracias. De hecho, en el sitio web de Pronote también recomiendan copiar los archivos al disco duro local
Ahora la instalación funciona bien copiando el archivo .iss a C::

Código: Seleccionar todo

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')
Para desinstalarlo, supongo que solo necesitas eliminar el directorio %basedir y copiar el archivo .iss al disco local. Se vería así:

Código: Seleccionar todo

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: Creación de un paquete de Pronote

Publicado: 29 de agosto de 2022 - 14:49
por sfonteneau
Baseir se puede utilizar durante la instalación sin ningún problema

El simple uso de `basedir` en la desinstalación no dará acceso al archivo que está en el paquete

Código: Seleccionar todo

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: Creación de un paquete de Pronote

Publicado: 29 de agosto de 2022 - 16:17
por adgm11
De acuerdo, todo funciona perfectamente con este paquete, gracias.
Solo hay que corregir un pequeño error tipográfico en el comando de desinstalación:
-f1c:\uninstPRONOTE.iss.

¿Filecopyto y shutil.copyfile hacen lo mismo? Excepto que para el segundo necesitas importar shutil.

Re: Creación de un paquete de Pronote

Publicado: 30 de agosto de 2022 - 09:41
por sfonteneau
`filecopyto` proviene directamente de setuphelpers de Wapt (haz clic con la tecla CTRL presionada en la función en tu IDE para ver el código subyacente directamente);

es una versión mejorada de `shutil.copyfile`.