Page 1 sur 1

PB double antislash

Posté : 08 déc. 2016 - 11:31
par adaurg
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

Re: PB double antislash

Posté : 08 déc. 2016 - 11:44
par htouvet
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)

...

Re: PB double antislash

Posté : 08 déc. 2016 - 13:58
par adaurg
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

Re: PB double antislash

Posté : 08 déc. 2016 - 14:47
par htouvet
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='')


Re: PB double antislash

Posté : 13 déc. 2016 - 22:40
par adaurg
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

Re: PB double antislash

Posté : 14 déc. 2016 - 22:31
par sfonteneau
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...")
  

Re: PB double antislash

Posté : 15 déc. 2016 - 08:13
par htouvet
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'