[RESOLU] Paquet Edt v2022 build 0.3.0 / Pronote v2022 build 0.3.0

Questions about WAPT Packaging / Requêtes et aides autour des paquets Wapt.
Règles du forum
Règles du forum communautaire
* English support on www.reddit.com/r/wapt
* Le support communautaire en français se fait sur ce forum
* Merci de préfixer le titre du topic par [RESOLU] s'il est résolu.
* Merci de ne pas modifier un topic qui est taggé [RESOLU]. Ouvrez un nouveau topic en référençant l'ancien
* Préciser version de WAPT installée, version complète ET numéro de build (2.2.1.11957 / 2.2.2.12337 / etc.) AINSI QUE l'édition Enterprise / Discovery
* Les versions 1.8.2 et antérieures ne sont plus maintenues. Les seules questions acceptées vis à vis de la version 1.8.2 sont liés à la mise à jour vers une version supportée (2.1, 2.2, etc.)
* Préciser OS du serveur (Linux / Windows) et version (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019)
* Préciser OS de la machine d'administration/création des paquets et de la machine avec l'agent qui pose problème le cas échéant (Windows 7 / 10 / 11 / Debian 11 / etc.)
* Eviter de poser plusieurs questions lors de l'ouverture de topic, sinon il risque d'être ignorer. Si plusieurs sujet, ouvrir plusieurs topic, et de préférence les uns après les autres et pas tous en même temps (ie ne pas spammer le forum).
* Inclure directement les morceaux de code, les captures d'écran et autres images directement dans le post. Les liens vers les pastebin, les bitly et autres sites tierces seront systématiquement supprimés.
* Comme tout forum communautaire, le support est fait bénévolement par les membres. Si vous avez besoin d'un support commercial, vous pouvez contacter le service commercial Tranquil IT au 02.40.97.57.55
olaplanche
Messages : 173
Inscription : 26 janv. 2017 - 11:11

26 janv. 2017 - 14:36

Bonjour,

:!: Penser à remplacer les variables SERVERNAME, SERVERPORT et NOMETAB par vos valeurs
Le nouveau code prend en charge automatiquement la présence éventuelle de la version précédente ainsi que la fonction def update_package(): pour simplifier la mise à jour.
Avec le même code, il est donc possible d'installer la dernière version côte à côte avec la version précédente de manière transparente.
Pour désinstaller la version précédente, il faut donc utiliser la fonction uninstall du paquet de la version prédédente. :!:

EDT 2022 v0.3.0 x64 :

Code : Tout sélectionner

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

uninstallkey = []

# Defining variables
bin_name_string = 'Install_EDTclient_FR_%s.%s_win64.exe'
app_uninstallkey = '{53EC7135-0E8C-419B-A1F3-5FAFB215686C}'
edition = 'v2022.0'
SERVERNAME = 'blabla.index-education.net' # Le nom DNS du serveur pronote
SERVERPORT = '49500' # Le port TCP du serveur pronote
NOMETAB = 'Mon ETAB' # Utilisé pour personnaliser le nom du raccourci sur le bureau

def install():
    # Initializing variables
    package_version = control.version.split('-',1)[0]
    bin_name = bin_name_string % (edition[1:5],package_version)
    edition_old = str(int(edition[1:5]) - 1)

    # Installing the package
    print('Installing: %s' % bin_name)
    import tempfile
    import codecs
    pathinstallfile = makepath(tempfile.gettempdir(),'Setup.iss')
    if installed_softwares ('INDEX EDUCATION - Client EDT %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\EDT %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\EDT %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 EDT.exe')
    uninstallkey.remove(app_uninstallkey)
    # Deleting response file
    remove_file(pathinstallfile)
    # Creating desktop shortcut for all users
    create_desktop_shortcut(r'EDT%s - %s' % (edition[1:5],NOMETAB),target=u'C:\Program Files\Index Education\EDT %s\Réseau\Client\Client EDT.exe' % edition[1:5],arguments=r'-Adresse "%s" -PortTcp "%s"' % (SERVERNAME,SERVERPORT))

def audit():
    if not uninstall_key_exists ('{775E087D-A428-428C-A5FD-000010008000}'):
        print('Module de Mise à jour automatique manquant')
        return "ERROR"
    if not isfile(r'%s\InstallShield Installation Information\{53EC7135-0E8C-419B-A1F3-5FAFB215686C}\setup.exe' % programfiles32):
        print('Binaire de désinstallation manquant')
        return "WARNING"
    else:
        return "OK"

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

    # Initializing variables
    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].replace(" ","")
            break
    latest_bin = bin_name_string % (edition[1:5],version)
    url_dl = 'https://tele7.index-education.com/telechargement/edt/%s/exe/Install_EDTclient_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 get_proxies():
    if platform.python_version_tuple()[0] == '3':
        from urllib.request import getproxies
    else:
        from urllib import getproxies
    return getproxies()


def get_version_from_binary(filename):
    if filename.endswith('.msi'):
        return get_msi_properties(filename)['ProductVersion']
    else:
        return get_file_properties(filename)['ProductVersion']


def remove_outdated_binaries(version, list_extensions=['exe','msi','deb','rpm','dmg','pkg'], list_filename_contain=None):
    if type(list_extensions) != list:
        list_extensions = [list_extensions]
    if list_filename_contain:
        if type(list_filename_contain) != list:
            list_filename_contain = [list_filename_contain]
    list_extensions = ['.' + ext for ext in list_extensions if ext[0] != '.']
    for file_ext in list_extensions:
        for bin_in_dir in glob.glob('*%s' % file_ext):
            if not version in bin_in_dir:
                remove_file(bin_in_dir)
            if list_filename_contain:
                for filename_contain in list_filename_contain:
                    if not filename_contain in bin_in_dir:
                        remove_file(bin_in_dir)

def get_proxies_from_wapt_console():
    proxies = {}
    if platform.system() == 'Windows':
        waptconsole_ini_path = makepath(user_local_appdata(), 'waptconsole', 'waptconsole.ini')
    else:
        waptconsole_ini_path = makepath(user_home_directory(), '.config', 'waptconsole', 'waptconsole.ini')
    if isfile(waptconsole_ini_path):
        proxy_wapt = inifile_readstring(waptconsole_ini_path, 'global', 'http_proxy')
        if proxy_wapt:
            proxies = {'http': proxy_wapt, 'https': proxy_wapt}
    return proxies

def uninstall():
    # Uninstalling the package
    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('EDT%s - %s.lnk' % (edition[1:5],NOMETAB))
    # Uninstalling Auto Update Agent
    if uninstall_key_exists('{775E087D-A428-428C-A5FD-000010008000}'):
        run('"MsiExec.exe" /X{775E087D-A428-428C-A5FD-000010008000} /qn')
:!: A renseigner obligatoirement dans le fichier control d'EDT : :!:

Code : Tout sélectionner

architecture      : x64
sources           : https://www.index-education.com/fr/telecharger-edt.php
Pronote 2022 v0.3.0 x64 :

Code : Tout sélectionner

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

uninstallkey = []

# Defining variables
bin_name_string = 'Install_PRNclient_FR_%s.%s_win64.exe'
app_uninstallkey = '{D1124ED8-514E-40BF-9021-D3B3CA941A53}'
edition = 'v2022.0'
SERVERNAME = 'blabla.index-education.net' # Le nom DNS du serveur pronote
SERVERPORT = '49500' # Le port TCP du serveur pronote
NOMETAB = 'Mon ETAB' # Utilisé pour personnaliser le nom du raccourci sur le bureau

def install():
    # Initializing variables
    package_version = control.version.split('-',1)[0]
    bin_name = bin_name_string % (edition[1:5],package_version)
    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=u'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 uninstall_key_exists ('{775E087D-A428-428C-A5FD-000010008000}'):
        print('Module de Mise à jour automatique manquant')
        return "ERROR"
    if not isfile(r'%s\InstallShield Installation Information\{D1124ED8-514E-40BF-9021-D3B3CA941A53}\setup.exe' % programfiles32):
        print('Binaire de désinstallation manquant')
        return "WARNING"
    else:
        return "OK"

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

    # Initializing variables
    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].replace(" ","")
            break
    latest_bin = bin_name_string % (edition[1:5],version)
    url_dl = 'https://tele7.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 get_proxies():
    if platform.python_version_tuple()[0] == '3':
        from urllib.request import getproxies
    else:
        from urllib import getproxies
    return getproxies()


def get_version_from_binary(filename):
    if filename.endswith('.msi'):
        return get_msi_properties(filename)['ProductVersion']
    else:
        return get_file_properties(filename)['ProductVersion']


def remove_outdated_binaries(version, list_extensions=['exe','msi','deb','rpm','dmg','pkg'], list_filename_contain=None):
    if type(list_extensions) != list:
        list_extensions = [list_extensions]
    if list_filename_contain:
        if type(list_filename_contain) != list:
            list_filename_contain = [list_filename_contain]
    list_extensions = ['.' + ext for ext in list_extensions if ext[0] != '.']
    for file_ext in list_extensions:
        for bin_in_dir in glob.glob('*%s' % file_ext):
            if not version in bin_in_dir:
                remove_file(bin_in_dir)
            if list_filename_contain:
                for filename_contain in list_filename_contain:
                    if not filename_contain in bin_in_dir:
                        remove_file(bin_in_dir)

def get_proxies_from_wapt_console():
    proxies = {}
    if platform.system() == 'Windows':
        waptconsole_ini_path = makepath(user_local_appdata(), 'waptconsole', 'waptconsole.ini')
    else:
        waptconsole_ini_path = makepath(user_home_directory(), '.config', 'waptconsole', 'waptconsole.ini')
    if isfile(waptconsole_ini_path):
        proxy_wapt = inifile_readstring(waptconsole_ini_path, 'global', 'http_proxy')
        if proxy_wapt:
            proxies = {'http': proxy_wapt, 'https': proxy_wapt}
    return proxies

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-000010008000}'):
        run('"MsiExec.exe" /X{775E087D-A428-428C-A5FD-000010008000} /qn')
:!: A renseigner obligatoirement dans le fichier control de Pronote : :!:

Code : Tout sélectionner

architecture      : x64
sources           : https://www.index-education.com/fr/telecharger-edt.php
Changelog du 05/12/2022:
- Ajout d'une fonction Audit pour edt et pronote afin de vérifier la bonne présence du module de mise à jour automatique et du binaire servant à la fonction uninstall qui a tendance à disparaitre.

Changelog du 01/12/2022:
- Mise à jour du lien de téléchargement d'edt dans la fonction update-package.

Changelog du 22/08/2022:
- Correctif dans la fonction update_package d'edt.

Changelog du 18/08/2022:
- Mise à jour du code pour pronote 2022 avec correctif pour mise à jour auto des fichiers de réponse. Il n'y a qu'à mettre à jour les variables edition et app_uninstallkey pour passer à la version 2022 ;)
- Changement de l'url source dans le fichier control pour utiliser la même qu'edt car celle de pronote change chaque été entre la pré-version et la version définitive, ce qui n'est pas le cas pour edt. Cela devrait permettre de ne plus avoir à jongler entre les deux !

Changelog du 21/06/2022:
- Mise à jour du code pour edt 2022 avec correctif pour mise à jour auto des fichiers de réponse. Il n'y a qu'à mettre à jour les variables edition et app_uninstallkey pour passer à la version 2022 ;)

Changelog du 09/06/2022:
- Mise à jour de l'url source dans le fichier control du paquet pronote.

Changelog du 08/06/2022:
- Correction d'une coquille non bloquante sur le control de la version minimun à l'installation et mise à jour de l'uninstallkey de l'agent de mise à jour.

Changelog du 02/06/2022:
- Mise à jour de la fonction update package suite à la sortie de la version 0.2.10 (la fonction prendra correctement en charge toutes les versions peu importe la longueur du numéro de version)

Changelog du 22/03/2022:
- Mise à jour de la variable url_dl (tele7 remplacé par tele3) suite au changement d'url de téléchargement.

Changelog du 11/02/2022 :
- Modification des fonctions def update_package() suite au changement du code source de la page web.

Changelog du 21/01/2022 :
- Compatibilité python 3
Dernière modification par olaplanche le 05 déc. 2022 - 14:04, modifié 31 fois.
- Version de WAPT installée : 2.3.0.13516 Enterprise
- OS du serveur : Linux / Debian Buster
- OS de la machine d'administration/création des paquets : Windows 10
Avatar de l’utilisateur
sfonteneau
Expert WAPT
Messages : 1783
Inscription : 10 juil. 2014 - 23:52
Contact :

26 janv. 2017 - 15:21

Bonjour

La variable basedir permet d'utiliser le chemin absolu

run(r'"toto.exe" %s\setup.iss' % basedir )
olaplanche
Messages : 173
Inscription : 26 janv. 2017 - 11:11

26 janv. 2017 - 15:44

Super merci pour la réponse ! Mais où se trouvent les fichiers pendant l'installation du paquet ?
Je vois bien le paquet copier dans le dossier c:\wapt\cache, mais il doit bien être décompressé quelque part, non ? Du coup quelle est la valeur de la variable basedir au moment du déploiement ?

Merci
- Version de WAPT installée : 2.3.0.13516 Enterprise
- OS du serveur : Linux / Debian Buster
- OS de la machine d'administration/création des paquets : Windows 10
Avatar de l’utilisateur
htouvet
Expert WAPT
Messages : 402
Inscription : 16 mars 2015 - 10:48
Contact :

26 janv. 2017 - 15:47

Le paquet est dézippé dans ke répertoire temporaire du système.
Pour voir la valeur...

Code : Tout sélectionner

def install(): 
    print(basedir)
Tranquil IT
olaplanche
Messages : 173
Inscription : 26 janv. 2017 - 11:11

27 janv. 2017 - 09:36

Excellent ! J'ai pu réaliser mon paquet :)

Pour info la commande exacte pour l'installation silencieuse d'edt :

Code : Tout sélectionner

run(r'"Install_EDTclient.exe" -s -f1%s\Setup.iss' % basedir)
Merci à vous
- Version de WAPT installée : 2.3.0.13516 Enterprise
- OS du serveur : Linux / Debian Buster
- OS de la machine d'administration/création des paquets : Windows 10
olaplanche
Messages : 173
Inscription : 26 janv. 2017 - 11:11

27 janv. 2017 - 14:06

Version finale avec création du raccourci personnalisé pour se connecter au serveur :

edt :

Code : Tout sélectionner

def install():
  print"installing EDT2016"
  run(r'"Install_EDTclient.exe" -s -f1%s\Setup.iss' % basedir)
  create_desktop_shortcut(r'EDT - Lycée',target=u'C:\Program Files (x86)\Index Education\EDT 2016\Réseau\Client EDT.exe',arguments=r'-Adresse "dns_du_serveur" -PortTcp "49300"')
pronote :

Code : Tout sélectionner

def install():
  print"installing Pronote2016"
  run(r'"Install_PRNclient.exe" -s -f1%s\Setup.iss' % basedir)
  create_desktop_shortcut(r'PRONOTE - Lycée',target=u'C:\Program Files (x86)\Index Education\Pronote 2016\Réseau\Client PRONOTE.exe',arguments=r'-Adresse "dns_du_serveur" -PortTcp "49300"')
- Version de WAPT installée : 2.3.0.13516 Enterprise
- OS du serveur : Linux / Debian Buster
- OS de la machine d'administration/création des paquets : Windows 10
olaplanche
Messages : 173
Inscription : 26 janv. 2017 - 11:11

09 août 2017 - 16:03

Bonjour,

Je reviens vers vous avec la réalisation des nouveaux paquets (version edt et pronote 2017). Je souhaiterais aller plus loin qu'avec les paquets précédents en utilisant la fonction install_exe_if_needed à la place d'un simple "run".

L'installation se déroule correctement mais je bute sur la désinstallation des paquets, voici mon code :

Code : Tout sélectionner

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

uninstallkey = []

def install():
    print('installing wapt-pronote2017')
    install_exe_if_needed("Install_PRNclient_FR_2017.0.1.2_win64.exe",silentflags='-s -f1%s\Setup.iss' % basedir,key='{82A4C6B8-0E8E-428E-8566-5045C833AA6B}',min_version='0.1.1.0',killbefore='Client PRONOTE.exe')
    uninstallkey.remove('{82A4C6B8-0E8E-428E-8566-5045C833AA6B}')
    filecopyto('Uninstall.iss','C:\Program Files (x86)\InstallShield Installation Information\{82A4C6B8-0E8E-428E-8566-5045C833AA6B}')

def uninstall():
    print('uninstalling wapt-pronote2017')
    run(r'"C:\Program Files (x86)\InstallShield Installation Information\{82A4C6B8-0E8E-428E-8566-5045C833AA6B}\setup.exe" -runfromtemp -l0x040c  -uninst -removeonly -s -f1%s\Uninstall.iss' % basedir)
La commande "filecopyto" ne fonctionne pas, le fichier "Uninstall.iss" contenu dans le paquet doit être accessible au moment de la désinstallation, je pensais donc le copier dans le dossier de l'installeur afin de pouvoir l'utiliser dans la commande de désinstallation...

La commande de désinstallation exécuter en local avec un chemin absolu vers le fichier Uninstall.iss fonctionne correctement !
J'en déduis qu'il ne manque plus qu'à placer le fichier Uninstall.iss correctement et de l'appeler avec la bonne syntaxe (j'ai un doute sur l'utilisation de la variable basedir sur ce coup là).

Merci
- Version de WAPT installée : 2.3.0.13516 Enterprise
- OS du serveur : Linux / Debian Buster
- OS de la machine d'administration/création des paquets : Windows 10
Avatar de l’utilisateur
sfonteneau
Expert WAPT
Messages : 1783
Inscription : 10 juil. 2014 - 23:52
Contact :

10 août 2017 - 14:17

Attention!

Vous n'avez pas passé le r devant la chaîne

Code : Tout sélectionner

"'C:\Program Files (x86)\InstallShield Installation Information\{82A4C6B8-0E8E-428E-8566-5045C833AA6B}"
Du coup python voit la chaîne comme ceci:

Code : Tout sélectionner

"'C:Program Files (x86)InstallShield Installation Information{82A4C6B8-0E8E-428E-8566-5045C833AA6B}"
;)

Le mieux dans l'histoire c'est de générer le fichier à la volée dans temp le fichier et également d'appeler la variable programefiles

Code : Tout sélectionner

def uninstall():
    import tempfile
    pathuninstallfile = makepath(tempfile.gettempdir(),'Uninstall.iss')
    data = ur"""gretyreyh
yhrthrthrt
h
trhrthrthrt
htrhrthrthrt"""
    fichier = open(pathuninstallfile, "w")
    fichier.write(data)
    fichier.close()
    run(r'"%s\InstallShield Installation Information\{82A4C6B8-0E8E-428E-8566-5045C833AA6B}\setup.exe" -runfromtemp -l0x040c  -uninst -removeonly -s -f1%s' % (programfiles32,pathuninstallfile))
    remove_file(pathuninstallfile)
    
olaplanche
Messages : 173
Inscription : 26 janv. 2017 - 11:11

11 août 2017 - 08:36

Merci !

Je viens de modifier mon paquet, tout semble bien fonctionner (pas d'erreur) mais le logiciel ne se désinstalle pas.
Pourtant le fichier est bien créé dans le dossier temp de l'utilisateur, son contenu est ok (fichier testé manuellement), la commande de désinstallation est la bonne (pas de soucis avec les variables).

N'ayant aucune erreur en retour, je ne vois pas trop où chercher, une idée ?
- Version de WAPT installée : 2.3.0.13516 Enterprise
- OS du serveur : Linux / Debian Buster
- OS de la machine d'administration/création des paquets : Windows 10
Avatar de l’utilisateur
sfonteneau
Expert WAPT
Messages : 1783
Inscription : 10 juil. 2014 - 23:52
Contact :

11 août 2017 - 23:13

Comment avez vous testé ?

Vous avez testé en exécutant uninstall() dans pyscripter ??
Verrouillé