Seite 1 von 1

Pronote-Paket erstellen

Veröffentlicht: 3. Juli 2022 – 16:55 Uhr
von adgm11
Guten Morgen
Ich möchte ein Paket erstellen, um den Pronote-Client (Index Education) zu installieren
Ich habe daher eine .exe-Datei und eine .iss-Datei für die Installation sowie eine weitere für die Deinstallation. Der Batch-Befehl zum Starten der unbeaufsichtigten Installation auf allen Rechnern lautet wie folgt:

Code: Alle auswählen

\\serveur\pronote\Install_PRNclient_FR_win64.exe -s -f1\\serveur\pronote\ClientPRONOTE.iss
Zur Deinstallation lauten die folgenden Befehle

Code: Alle auswählen

"%ProgramFiles(x86)%\InstallShield Installation Information\{E20E5011-C887-40D8-8C26-99460A24F860}\setup.exe -s -uninst -f1\\serveur\pronote\uninstPRONOTE.iss
Wie kann ich diese Befehle in PyScripter in die Python-Sprache umwandeln, um ein Paket zu erstellen, das die Installation und Deinstallation ermöglicht?
DANKE

Betreff: Erstellen eines Pronote-Pakets

Veröffentlicht: 3. Juli 2022 – 18:28 Uhr
von adgm11
Nach mehreren Versuchen habe ich endlich die gewünschten Befehle gefunden, und es funktioniert mit pyscripter.
  • Zur Installation installiert Befehl 1 die ausführbare Datei mithilfe der zuvor erstellten .iss-Antwortdatei (siehe die Indexeducation-Website). Befehl 2 kopiert die Proxy-Einstellungen. Befehl 3 kopiert die Client-Einstellungen, einschließlich des TCP-Ports, der Indexeducation-Serveradresse und des Client-Namens.
  • Zur Deinstallation dient Befehl 1 zur Deinstallation mithilfe der Deinstallationsantwortdatei .iss. Befehl 2 löscht den Ordner indexeducation, der anscheinend bestehen bleibt und bei einer Neuinstallation Probleme verursachen kann.

Code: Alle auswählen

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')
Das Problem ist, dass Wapt beim Deployment der App auf einem PC folgenden Fehler ausgibt:

Code: Alle auswählen

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

Betreff: Erstellen eines Pronote-Pakets

Veröffentlicht: 4. Juli 2022 – 13:29 Uhr
von Sfonteneau
Hallo,


haben Sie sich schon den bestehenden Pronote-Thread in diesem Forum mit dem funktionierenden Code angesehen?

viewtopic.php?p=10396#p10396

Betreff: Erstellen eines Pronote-Pakets

Veröffentlicht: 9. Juli 2022 – 15:36 Uhr
von adgm11
Dieses Thema ist in der Tat sehr nützlich. Die globale Version funktioniert jedoch nicht; die aus dem ersten Beitrag mit der Download-URL und der Erstellung der .iss-Dateien...

Daher ist die einzig praktikable Option, die .iss-Dateien zusammen mit den .xcfg-Konfigurationsdateien für den Proxy und den Index Education Server in den Paketordner zu legen

In meinem Fall konnte ich die Installation mit folgendem Befehl zum Laufen bringen:

Code: Alle auswählen

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')
Sie müssen das Programm beim ersten Mal starten (und es gegebenenfalls wieder stoppen), um die Konfigurationsdateien zu kopieren, andernfalls sind die Verzeichnisse nicht verfügbar.

Das einzige Problem ist die Deinstallation; ich bekomme es nicht hin. Ich habe folgenden Befehl verwendet:

Code: Alle auswählen

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)
Ich verstehe den Unterschied zwischen `remove` und `uninstall` in PyScripter nicht. `remove` funktioniert einwandfrei bei Paketen, in die ein Deinstallationsschlüssel injiziert wird. Bei Pronote ist das jedoch anders, und man muss eine `.iss`-Antwortdatei verwenden. Wie kann ich den Deinstallationsbefehl in `def uninstall` zum Laufen bringen? Denn wenn ich in WAPT versuche, das Paket auf einem Rechner zu deinstallieren, lässt sich Pronote nicht deinstallieren.
DANKE

Betreff: Erstellen eines Pronote-Pakets

Veröffentlicht: 26. August 2022 – 15:05 Uhr
von adgm11
Guten Morgen
Ich habe das neue Paket mit der Version 2022 erstellt und dabei darauf geachtet, die Werte des Deinstallationsschlüssels in den .xcfg-Dateien und den umbenannten Verzeichnissen anzupassen
Das Problem besteht weiterhin: Der Deinstallationsbefehl funktioniert nicht. Ich weiß nicht, ob bei der Installation der neuen Version ein neues Verzeichnis erstellt oder das alte überschrieben wird.

Und noch ein weiteres, wiederkehrendes Problem, das ich nicht verstehe. Wenn ich die Installation testweise über PyScripter ausführe, funktioniert sie einwandfrei auf dem PC, auf dem die Wapt-Konsole läuft. Wenn ich sie jedoch auf anderen PCs bereitstelle, erhalte ich folgende Fehlermeldung:

Datei "C:\Program Files (x86)\wapt\waptutils.py", Zeile 2126, in run
raise CalledProcessErrorOutput(proc.returncode, cmd, ''.join(output))
waptutils.CalledProcessErrorOutput: Der Befehl '"Install_PRNclient_FR_2022.0.2.1_win64.exe" -s -f1C:\\WINDOWS\\TEMP\\wapt4g0p39cy\\installPRONOTE.iss' hat den Exit-Status 1 zurückgegeben.
Ausgabe: '"Install_PRNclient_FR_2022.0.2.1_win64.exe"' wird nicht als interner Befehl erkannt
oder extern, ein ausführbares Programm oder eine Batchdatei.


Warum verweist es auf den falschen Ordner: -f1C:\\WINDOWS\\TEMP\\wapt4g0p39cy\\installPRONOTE.iss? Die Datei installPRONOTE.iss sollte idealerweise aus dem Paketordner in waptdev abgerufen werden, da ich sie dort abgelegt habe. Wie kann ich diesen Ordner angeben? Was bedeutet die Variable %s? Und was bedeutet %basedir?

Hier ist das Paket:

Code: Alle auswählen

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')

Betreff: Erstellen eines Pronote-Pakets

Veröffentlicht: 29. August 2022 - 10:28 Uhr
von Sfonteneau
`basedir` sollte bei der Deinstallation nicht verwendet werden.

Tatsächlich ist das Paket nach der Ausführung von `remove/uninstall` nicht mehr auf dem Rechner vorhanden. (Es wurde während der Installation entfernt, daher sind die darin enthaltenen Dateien nicht mehr verfügbar.)

Daher müssen Sie Ihre `uninstPRONOTE.iss`-Datei während der Installation an einen anderen Ort auf dem Rechner kopieren, um sie bei der Deinstallation verwenden zu können, oder die Datei bei der Ausführung von `def uninstall` erstellen.

Das Paket `msoffice` macht dies. Ein Beispiel finden Sie im Paket selbst; es erstellt die Datei nur bei der Deinstallation.

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

Betreff: Erstellen eines Pronote-Pakets

Veröffentlicht: 29. August 2022 - 11:56 Uhr
von adgm11
Okay, danke. Tatsächlich wird auf der Pronote-Website auch empfohlen, die Dateien auf die lokale Festplatte zu kopieren
Die Installation funktioniert nun einwandfrei, indem die .iss-Datei nach C:: kopiert wird

Code: Alle auswählen

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')
Zur Deinstallation müssen Sie vermutlich lediglich das Verzeichnis %basedir löschen und die Datei .iss auf die lokale Festplatte kopieren. Das sähe dann etwa so aus:

Code: Alle auswählen

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')
    

Betreff: Erstellen eines Pronote-Pakets

Veröffentlicht: 29. August 2022 – 14:49 Uhr
von Sfonteneau
baseir kann während der Installation problemlos verwendet werden

Die Verwendung von `basedir` beim Deinstallieren allein gewährt keinen Zugriff auf die im Paket enthaltene Datei

Code: Alle auswählen

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')

Betreff: Erstellen eines Pronote-Pakets

Veröffentlicht: 29. August 2022 – 16:17 Uhr
von adgm11
Okay, mit diesem Paket funktioniert alles einwandfrei, danke.
Nur ein kleiner Tippfehler im Deinstallationsbefehl:
-f1c:\uninstPRONOTE.iss.

Erfüllen filecopyto und shutil.copyfile dieselbe Funktion? Nur dass man für die zweite Funktion shutil importieren muss.

Betreff: Erstellen eines Pronote-Pakets

Veröffentlicht: 30. August 2022 - 09:41 Uhr
von Sfonteneau
`filecopyto` stammt direkt aus den Setup-Helfern von Wapt (klicken Sie in Ihrer IDE mit STRG auf die Funktion, um den zugrunde liegenden Code direkt anzuzeigen);

es handelt sich um eine verbesserte Version von `shutil.copyfile`.