PB double antislash

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
adaurg
Messages : 3
Inscription : 08 déc. 2016 - 10:39

08 déc. 2016 - 11:31

Bonjour,

Avant tout un grand merci à l’équipe de développement pour cette super solution qui me facilite grandement la vie ;)

Après avoir mis en place le déploiement des packages classiques.
Je m’attaque à la création de mes premiers paquets… Désolé je suis aussi newbie en Python :D

Je cherche à installer Qgis 2.14.9.
L’installation de Qgis 2.14.9 ne pose pas de problème SAUF qu’il faut que je désinstalle la version précédente avant : une 2.14.3 (qui n’a pas été installée avec wapt sinon j’aurai pu peut-être utiliser la fonction "conflits" si j’ai bien compris ?)

J’ai donc fait ce setup :

Code : Tout sélectionner

from setuphelpers import *

uninstallkey = ['QGIS 2.14']

def install():
    print('installation de Qgis 2.14.9')
    if isrunning('qgis-bin.exe'):
        print("Qgis est ouvert !!! GRRRR...")
        quit()

    print('desinstallation de Qgis 2.14.3')
    sofname = 'Qgis Essen'
    versionsoft = '2.14.3'
    uninstallkey = ['QGIS Essen']
    check_installed_soft = installed_softwares(sofname)
    if check_installed_soft:
        for uninstall in check_installed_soft:
            if Version(uninstall['version']) < Version(versionsoft):
                cmd = WAPT.uninstall_cmd(uninstall['key'])
                run(cmd)

    run(r'"QGIS-OSGeo4W-2.14.9-2-Setup-x86_64.exe" /S')
    remove_desktop_shortcut(r'GRASS GIS 7.0.4')
    remove_desktop_shortcut(r'GRASS GIS 7.0.5')
    remove_desktop_shortcut(r'OSGeo4W Shell')
    remove_tree(r'C:\Users\Public\Desktop\QGIS Essen')
    remove_tree(r'C:\Users\Public\Desktop\QGIS 2.14')
sauf que quand je l’exécute j’ai des doubles antislash dans le path de l’exe de désinstallation qui s’ajoutent alors que la valeur dans le registre est bonne.

Code : Tout sélectionner

FATAL ERROR : CalledProcessError: Command '([u'C:\\Program Files\\QGIS Essen\\Un
install-QGIS.exe', '/S'],)' returned non-zero exit status 1
J’ai gratté dans les posts du forum mais j’ai rien trouvé :cry:

Quel est le moyen pour contourner ce problème ?

Merci pour votre aide
Denis
Avatar de l’utilisateur
htouvet
Expert WAPT
Messages : 404
Inscription : 16 mars 2015 - 10:48
Contact :

08 déc. 2016 - 11:44

Les double antislash sont "normaux"
C'est l'affichage du contenu d'une chaine de caractères avec les antislash "échappés" (pour qu'ils ne soient pas interprétés comme des caractères de controle)

Le problème est ailleurs, sûrement un problème 32/64 bit.
Wapt est un process 32 bit. Donc C:\Program Files\ est en fait automatiquement changé en C:\Program Files (x86)\ par Windows

Je vous suggère donc de désactiver la redirection automatique 32/64 de Windows avec la fonction contexte "with disable_file_system_redirection():"

Code : Tout sélectionner

..
    if check_installed_soft:
        for uninstall in check_installed_soft:
            if Version(uninstall['version']) < Version(versionsoft):
                with disable_file_system_redirection():
                    cmd = WAPT.uninstall_cmd(uninstall['key'])
                    run(cmd)

...
Tranquil IT
adaurg
Messages : 3
Inscription : 08 déc. 2016 - 10:39

08 déc. 2016 - 13:58

Merci pour cette réponse rapide.
C'est noté pour les doubles antislash :oops:

Effectivement Qgis 2.14.3 est en 64bits

J'ai testé avec en désactivant la redirection automatique comme indiqué (merci pour le code)

Mais... l'erreur est toujours là...

Je peux peut-être contourner le problème avec un fichier .bat (mais c'est pas très propre) ?
Dans ce cas, je dois mettre le .bat au niveau que le fichier setup.py ? ou dans un partage réseau ?

Merci
Denis
Avatar de l’utilisateur
htouvet
Expert WAPT
Messages : 404
Inscription : 16 mars 2015 - 10:48
Contact :

08 déc. 2016 - 14:47

Vous pouvez vous inspirer de :

Code : Tout sélectionner

from setuphelpers import *
import glob,time
import regutil

uninstallkey = []

version = '2.16.2-3'
url = "http://qgis.org/downloads/QGIS-OSGeo4W-%s-Setup-x86.exe" % version
url64 = "http://qgis.org/downloads/QGIS-OSGeo4W-%s-Setup-x86_64.exe" % version
exe = "QGIS-OSGeo4W-%s-Setup-x86.exe" % version
exe64 = "QGIS-OSGeo4W-%s-Setup-x86_64.exe" % version

def install():
    with disable_file_system_redirection():
        #Remove Old Versions in Default Directory
        for uninstall in glob.glob(makepath(programfiles,'QGIS*','Uninstall-QGIS.exe')):
            run_notfatal('"%s" /S'%uninstall)
            time.sleep(30)

        if isdir(makepath(programfiles,'QGIS 2.16.2')):
            remove_tree(makepath(programfiles,'QGIS 2.16.2'))

        #Fix bug with QGIS thinking it is still installed
        registry_delete(HKEY_LOCAL_MACHINE,makepath('Software','QGIS 2.16.2'),None)

    if iswin64():
        install_exe_if_needed(exe64,'/S',key='QGIS 2.16',min_version='')
    else:
        install_exe_if_needed(exe,'/S',key='QGIS Wien',min_version='')

Tranquil IT
adaurg
Messages : 3
Inscription : 08 déc. 2016 - 10:39

13 déc. 2016 - 22:40

Merci pour votre aide,

Cela m'a sauvé...
Il faut que je progresse encore en python... mais du coup j'ai fait comme ça

Code : Tout sélectionner

# -*- coding: utf-8 -*-
from setuphelpers import *
import glob,time
import regutil

uninstallkey = ['QGIS 2.14']

def install():
    print('installation de Qgis 2.14.9')
    if isrunning('qgis-bin.exe'):
        print("Qgis est ouvert !!! GRRRR...")
        quit()

    print('desinstallation de Qgis 2.14.3')
    with disable_file_system_redirection():
        #Remove Old Versions in Default Directory
        for uninstall in glob.glob(makepath(programfiles,'QGIS*','Uninstall-QGIS.exe')):
            run_notfatal('"%s" /S'%uninstall)
            time.sleep(30)

        #Fix bug with QGIS thinking it is still installed
        registry_deletekey(HKEY_LOCAL_MACHINE,'software\microsoft\windows\currentversion\uninstall','QGIS Essen')
        registry_deletekey(HKEY_LOCAL_MACHINE,'software','QGIS Essen')


    run(r'"QGIS-OSGeo4W-2.14.9-2-Setup-x86_64.exe" /S')
    remove_desktop_shortcut(r'GRASS GIS 7.0.4')
    remove_desktop_shortcut(r'GRASS GIS 7.0.5')
    remove_desktop_shortcut(r'OSGeo4W Shell')
    remove_tree(r'C:\Users\Public\Desktop\QGIS Essen')
    remove_tree(r'C:\Users\Public\Desktop\QGIS 2.14')
    if isdir(makepath(programfiles,'QGIS Essen')):
            remove_tree(makepath(programfiles,'QGIS Essen'))
Et ça marche. :P

Est-ce que vous envisagez de faire une rubrique spéciale partage de setup.py ?

Merci
Avatar de l’utilisateur
sfonteneau
Expert WAPT
Messages : 1829
Inscription : 10 juil. 2014 - 23:52
Contact :

14 déc. 2016 - 22:31

Attention ici :

Code : Tout sélectionner

def install():
    print('installation de Qgis 2.14.9')
    if isrunning('qgis-bin.exe'):
        print("Qgis est ouvert !!! GRRRR...")
        quit()
  
Ici vous quittez si qgis-bin.exe est ouvert

Il n'y aura donc pas de seconde tentative

Il vous faudrait remplacer par

Code : Tout sélectionner

def install():
    print('installation de Qgis 2.14.9')
    if isrunning('qgis-bin.exe'):
        error("Qgis est ouvert !!! GRRRR...")
  
Avatar de l’utilisateur
htouvet
Expert WAPT
Messages : 404
Inscription : 16 mars 2015 - 10:48
Contact :

15 déc. 2016 - 08:13

Egalement, préciser que les antislashes ne doivent pas être interprétés en mettant un r (raw string) devant le chemin de la clé de registre.

r'software\microsoft\windows\currentversion\uninstall'
Tranquil IT
Verrouillé