Pagina 1 di 1

Pacchetto Pronote 2023, non disinstalla la versione 2022

Pubblicato: 30 agosto 2023 - 11:02
di chris2b
Buongiorno,
Ho scaricato il pacchetto di installazione di Pronote 2023 dal forum, ma non riesco a capire come modificarlo per disinstallare la versione precedente.

Codice: Seleziona tutto

# -*- coding: utf-8 -*-
from setuphelpers import *
import platform

uninstallkey = []

# Defining variables
bin_contains = "Install_PRNclient_FR_"
app_uninstallkey = "{02871376-45F6-4642-9D84-C7681ABE361F}"
edition = "v2023.0"
SERVERNAME = "RNE.index-education.net"  # Le nom DNS du serveur pronote
SERVERPORT = "49300"  # Le port TCP du serveur pronote
NOMETAB = "MonETAB"  # Utilisé pour personnaliser le nom du raccourci sur le bureau


def install():
    # Initializing variables
    package_version = control.version.split("-", 1)[0]
    bin_name = glob.glob("*%s*.exe" % bin_contains)[0]
    edition_old = str(int(edition[1:5]) - 1)

    print("Installing: %s" % bin_name)
    import tempfile
    import codecs

    pathinstallfile = makepath(tempfile.gettempdir(), "Setup.iss")
    if installed_softwares("INDEX EDUCATION - Client PRONOTE %s - 64bit" % edition_old):
        data = r"""[InstallShield Silent]
Version=v7.00
File=Response File
[File Transfer]
OverwrittenReadOnly=NoToAll
[%s-DlgOrder]
Dlg0=%s-SdLicense2Rtf-0
Count=6
Dlg1=%s-SdAskDestPath-0
Dlg2=%s-AskOptions-0
Dlg3=%s-AskOptions-1
Dlg4=%s-AskOptions-2
Dlg5=%s-SdFinish-0
[%s-SdLicense2Rtf-0]
Result=1
[%s-SdAskDestPath-0]
szDir=C:\Program Files\Index Education\Pronote %s\Réseau\Client
Result=1
[%s-AskOptions-0]
Result=1
Sel-0=0
[%s-AskOptions-1]
Result=1
Sel-0=1
Sel-1=0
Sel-2=0
Sel-3=0
[%s-AskOptions-2]
Result=1
Sel-0=0
[%s-SdFinish-0]
Result=1
bOpt1=0
bOpt2=0
""" % (
            app_uninstallkey,
            app_uninstallkey,
            app_uninstallkey,
            app_uninstallkey,
            app_uninstallkey,
            app_uninstallkey,
            app_uninstallkey,
            app_uninstallkey,
            app_uninstallkey,
            edition[1:5],
            app_uninstallkey,
            app_uninstallkey,
            app_uninstallkey,
            app_uninstallkey,
        )
    else:
        data = r"""[InstallShield Silent]
Version=v7.00
File=Response File
[File Transfer]
OverwrittenReadOnly=NoToAll
[%s-DlgOrder]
Dlg0=%s-SdLicense2Rtf-0
Count=5
Dlg1=%s-SdAskDestPath-0
Dlg2=%s-AskOptions-0
Dlg3=%s-AskOptions-1
Dlg4=%s-SdFinish-0
[%s-SdLicense2Rtf-0]
Result=1
[%s-SdAskDestPath-0]
szDir=C:\Program Files\Index Education\Pronote %s\Réseau\Client
Result=1
[%s-AskOptions-0]
Result=1
Sel-0=1
Sel-1=0
Sel-2=0
Sel-3=0
[%s-AskOptions-1]
Result=1
Sel-0=0
[%s-SdFinish-0]
Result=1
bOpt1=0
bOpt2=0
""" % (
            app_uninstallkey,
            app_uninstallkey,
            app_uninstallkey,
            app_uninstallkey,
            app_uninstallkey,
            app_uninstallkey,
            app_uninstallkey,
            app_uninstallkey,
            edition[1:5],
            app_uninstallkey,
            app_uninstallkey,
            app_uninstallkey,
        )
    fichier = codecs.open(pathinstallfile, "w", encoding="mbcs")
    fichier.write(data)
    fichier.close()
    install_exe_if_needed(
        bin_name, silentflags="-s -f1%s" % pathinstallfile, key=app_uninstallkey, min_version=package_version, killbefore="Client PRONOTE.exe"
    )
    uninstallkey.remove(app_uninstallkey)
    # Deleting response file
    remove_file(pathinstallfile)
    # Creating desktop shortcut for all users
    create_desktop_shortcut(
        r"Pronote%s - %s" % (edition[1:5], NOMETAB),
        target="C:\Program Files\Index Education\Pronote %s\Réseau\Client\Client PRONOTE.exe" % edition[1:5],
        arguments=r'-Adresse "%s" -PortTcp "%s"' % (SERVERNAME, SERVERPORT),
    )


def audit():
    if not installed_softwares("Mise à jour automatique"):
        print("Module de Mise à jour automatique manquant")
        return "ERROR"
    if not isfile(r"%s\InstallShield Installation Information\%s\setup.exe" % (programfiles32, app_uninstallkey)):
        print("Binaire de désinstallation manquant")
        return "WARNING"
    else:
        for soft in installed_softwares("Mise à jour automatique"):
            print(soft["name"] + " : " + soft["version"])
        return "OK"


def update_package():
    print("Downloading/Updating package content from upstream binary sources")

    # Initializing variables
    bin_name_string = "Install_PRNclient_FR_%s.%s_win64.exe"
    proxies = get_proxies()
    if not proxies:
        proxies = get_proxies_from_wapt_console()
    app_name = control.name
    url = control.sources
    app_arch = control.architecture
    if app_arch == "x64":
        dl_arch = "win64"
    else:
        dl_arch = "win32"

    # Getting latest version from official website
    page = wgets(control.sources, proxies=proxies)
    for line in page.splitlines():
        if ("CLIENT EDT %s - 0." % edition[1:5]) in line:
            version = line.split('-')[-1].split('<')[0].replace(" ","")
            break
    latest_bin = bin_name_string % (edition[1:5], version)
    url_dl = "https://tele3.index-education.com/telechargement/pn/%s/exe/Install_PRNclient_FR_%s.%s_%s.exe" % (
        edition,
        edition[1:5],
        version,
        dl_arch,
    )

    print("Latest %s version is: %s" % (app_name, version))
    print("Download url is: %s" % url_dl)

    # Downloading latest binaries
    if not isfile(latest_bin):
        print("Downloading: %s" % latest_bin)
        wget(url_dl, latest_bin, proxies=proxies)

        # Checking version from file
        version_from_file = get_version_from_binary(latest_bin)
        if version != version_from_file:
            os.rename(latest_bin, bin_name_string % (edition[1:5], version_from_file))
            version = version_from_file

        # Changing version of the package
        control.version = "%s-%s" % (version, int(control.version.split("-")[-1]) + 1)
        control.save_control_to_wapt()
        print("Changing version to: %s in WAPT\\control" % control.version)

    # Deleting outdated binaries
    remove_outdated_binaries(version)


def uninstall():
    print("uninstalling: %s" % control.package)
    import tempfile

    pathuninstallfile = makepath(tempfile.gettempdir(), "Uninstall.iss")
    data = r"""[InstallShield Silent]
Version=v7.00
File=Response File
[File Transfer]
OverwrittenReadOnly=NoToAll
[%s-DlgOrder]
Dlg0=%s-MessageBox-0
Count=2
Dlg1=%s-SdFinishReboot-0
[%s-MessageBox-0]
Result=6
[%s-SdFinishReboot-0]
Result=1
BootOption=0
""" % (
        app_uninstallkey,
        app_uninstallkey,
        app_uninstallkey,
        app_uninstallkey,
        app_uninstallkey,
    )
    fichier = open(pathuninstallfile, "w")
    fichier.write(data)
    fichier.close()
    run(r'"%s\InstallShield Installation Information\%s\setup.exe" -s -uninst -f1%s' % (programfiles32, app_uninstallkey, pathuninstallfile))
    # Deleting response file
    remove_file(pathuninstallfile)
    # Removing desktop shortcut for all users
    remove_desktop_shortcut("Pronote%s - %s.lnk" % (edition[1:5], NOMETAB))
    # Uninstalling Auto Update Agent
    if uninstall_key_exists("{775E087D-A428-428C-A5FD-000010010000}"):
        run('"MsiExec.exe" /X{775E087D-A428-428C-A5FD-000010010000} /qn')
Ecco il codice utilizzato

Re: Pacchetto Pronote 2023, non disinstalla la versione 2022

Pubblicato: 30 agosto 2023 - 16:44
di dcardon
Versione WAPT, edizione, sistema operativo, ecc. Vedi le regole del forum.
Cordiali saluti,
Denis

Re: Pacchetto Pronote 2023, non disinstalla la versione 2022

Pubblicato: 17 dicembre 2024 - 15:58
di eric3360
Ciao,

per assicurarti che il pacchetto di installazione di PRONOTE 2023 disinstalli automaticamente la versione 2022, puoi aggiungere una funzione di disinstallazione all'inizio del tuo script. Ecco come procedere:

1. **Identifica la chiave di disinstallazione di PRONOTE 2022**: usa lo strumento `wapt-get list-registry` o consulta l'inventario software della console WAPT per trovare la chiave di disinstallazione corrispondente a PRONOTE 2022.

2. **Aggiungi il comando di disinstallazione**: inserisci il seguente comando all'inizio della tua funzione `install()` nello script WAPT:

```python
def install():
# Disinstalla PRONOTE 2022 se presente
run_notfatal(r'MsiExec.exe /x {UNINSTALLATION_KEY} /passive /norestart')

# Continua l'installazione di PRONOTE 2023
# ...
```

Sostituisci `{UNINSTALLATION_KEY}` con la chiave esatta trovata nel passaggio precedente. La funzione `run_notfatal` consente di eseguire il comando di disinstallazione senza interrompere lo script in caso di errore, garantendo così che l'installazione della nuova versione prosegua.

3. **Verifica l'installazione**: Assicurati che il resto dello script gestisca correttamente l'installazione di PRONOTE 2023, tenendo conto di eventuali configurazioni specifiche.

Questo metodo garantisce che la versione precedente di PRONOTE venga disinstallata prima dell'installazione della nuova, evitando così conflitti tra le versioni. ;)