[RESOLU] Setup.py de Mblock

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
Avatar de l’utilisateur
sfonteneau
Expert WAPT
Messages : 1783
Inscription : 10 juil. 2014 - 23:52
Contact :

29 déc. 2017 - 12:31

Code : Tout sélectionner

sfonteneau, pour éviter de perdre du temps et faire ça bien, peux-tu nous aider dans la rédaction du session_setup STP?
Si vous avez une méthode efficace a tous les coup oui je peu :) Mais pour l'instant c'est un peu flou

Le plus simple dans ce cas quand même serait de contacter un développeur :

http://www.mblock.cc/contactus/

Au final a mon avis ça va finir que le logiciel lors du premier démarrage va détecter la langue du système :D et mettre cette langue par Default au démarrage.

J'ai déjà contacté certain développeur d'application pour ce genre de chose et ils peuvent être assez réceptif.

A vous de jouer !
myosotis
Messages : 5
Inscription : 26 déc. 2017 - 16:34

29 déc. 2017 - 14:34

Il s'agit de copier un /com.makeblock.Scratch3.4.11/Local Store "formaté" en français dans le Appdata/Roming/ de chaque user
et faire aussi en sorte que pour l'interactive ou current user ça fonctionne également, en français...
Avatar de l’utilisateur
sfonteneau
Expert WAPT
Messages : 1783
Inscription : 10 juil. 2014 - 23:52
Contact :

29 déc. 2017 - 17:18

myosotis a écrit : 29 déc. 2017 - 14:34 Il s'agit de copier un /com.makeblock.Scratch3.4.11/Local Store "formaté" en français dans le Appdata/Roming/ de chaque user
et faire aussi en sorte que pour l'interactive ou current user ça fonctionne également, en français...
Pour la partie:
myosotis a écrit : 29 déc. 2017 - 14:34 faire aussi en sorte que pour l'interactive ou current user ça fonctionne également, en français
je ne comprend pas trop.

En revanche vous pouvez effectivement créer un com.makeblock.Scratch3.4.11 qui fonctionne, le copier lors du def install() dans un dossier sur la machine puis le copier a l’inverse lors du session_setup dans %appdata% de l'utilisateur.

Viens ensuite la question de savoir ce que l'ont fait si le dossier com.makeblock.Scratch3.4.11 existe déjà lors du session setup. On écrase, et tant pi si l'utilisateur a déjà un paramétrage effectuée ? on écrase ?

https://dev.tranquil.it/sphinxdocs/sour ... .copytree2
myosotis
Messages : 5
Inscription : 26 déc. 2017 - 16:34

29 déc. 2017 - 18:12

J essaye de vous copier mon code dès que possible. Merci bcp pour votre aide.

J'ai bien tenté d utiliser copytree2. Ça fonctionne sur un chemin qui n est pas relatif au user (je le fais en pré requis vu que via un session setup() on ne peut faire appel à un fichier ou dossier qu'on fournit dans le paquet, je copie donc "mes sources" embarquées dans le paquet dans un dossier dans Program data puis tente d'y faire appel...sans succès jusqu'alors.

/écrasement du dossier perso dans Appdata, ce n est pas à considérer. Dans notre environnement de prod l utilisateur n est pas convié à enregistrer des choses localement.

À vous relire, j ai l'impression qu'il ne faut pas faire le focus sur l utilisateur, mais sur appdata. C'est peut-être là que je bug....?!!
myosotis
Messages : 5
Inscription : 26 déc. 2017 - 16:34

31 déc. 2017 - 16:06

Code : Tout sélectionner

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

# Importation des fichiers de personalisation 
copytree2(r'Perso',r'C:\ProgramData\mBlock') #Import du dossier fourni dans le paquet
filecopyto(r'Copy.cmd',r'C:\ProgramData\mBlock') #Import d'un fourni egalement avec le paquet

key = "{1E9DFEBB-4088-4693-A521-C755318BD492}_is1"
uninstallkey = ['{1E9DFEBB-4088-4693-A521-C755318BD492}_is1']

#Creation d'un targetdir en faisant usage de user_appdata qui selon la doc renvoit à /userX/appdata/roaming/
targetdir = makepath(user_appdata(),'com.makeblock.Scratch3.4.11')
print targetdir # ça c'est pour moi ;) - ca m'affiche bien le dossier souhaité... malheureusement l'exploit est nulle

#uninstallstring = [r' ""C:\Program Files (x86)\mBlock\unins000.exe" /SILENT {1E9DFEBB-4088-4693-A521-C755318BD492}_is1']

def install():

        versionpaquet = control['version'].split('-',1)[0]

        print('Importation de drivers')

        with disable_file_system_redirection():
             run('regedit.exe /s usbserial_arduino.reg')
             run(r'"%s" /VERYSILENT' % makepath('drivers','Driver_for_Windows.exe'))

        print('Installation de util-mblock')
        install_exe_if_needed("mBlock_win_V"+versionpaquet+".exe",
                            silentflags="/VERYSILENT",
                            key=key,
                            min_version=versionpaquet,
                            killbefore="mBlock.exe")
				
		#suppression de la clé de désinstallation pour pouvoir faire une désinstallation silencieuse. Voir def uninstall():
        #uninstallkey.remove(key) # FONCTION pas dispo dans Setuphelpers v1.3.5
		
        #suppression du raccourci bureau
        #remove_desktop_shortcut('mBlock')
		
	print "Post installation"
	lang = makepath(targetdir)
		
	if not isdir(lang):
		os.makedirs(lang)
		copytree2('Perso','targetdir') #Tentative d'import de com.makeblock.Scratch3.4.11 via fonction copytree2 + user_appdata() : Resultat non probant
		session_setup()
		   
		
def uninstall():
    print('Désinstallation de util-mblock')
    run(r'"%s\unins000.exe" /VERYSILENT' % install_location(key))		
		
		
def session_setup():

	targetdir = makepath(user_appdata(),'com.makeblock.Scratch3.4.11')

	if not isdir(targetdir):
			print('creation du dossier com.makeblock.Scratch3.4.11')
			mkdirs(makepath(user_appdata(),'com.makeblock.Scratch3.4.11'))
			#copytree2('C:\ProgramData\mBlock','targetdir')
			run(r'C:\ProgramData\mBlock\Copy.cmd')
		#ci-dessus vs avez mes 2 tentatives : (1) via copytree2;, l'autre via le run d'un cmd que j'ai essayé de runner pour injecter les fichiers adéquats. Ni l'une, ni l'autre des méthodes ne fonctionnent.
	
	else:
		#remove_file(makepath(user_appdata(),'com.makeblock.Scratch3.4.11'))
		#copytree2('C:\ProgramData\mBlock','targetdir')
		run(r'C:\ProgramData\mBlock\Copy.cmd')
		#copytree2(r'C:\ProgramData\mBlock',r'%USERPROFILE%\AppData\Roaming')
		
#Personalisation de mblock pour l'interactive User - Alternative try		
run(r'"Copy.cmd"')
+ Copie de mon cmd

Code : Tout sélectionner

if not exist C:\Users\%username%\AppData\Roaming\com.makeblock.Scratch3.4.11 mkdir C:\Users\%username%\AppData\Roaming\com.makeblock.Scratch3.4.11 
xcopy C:\ProgramData\mBlock\com.makeblock.Scratch3.4.11 C:\Users\%username%\AppData\Roaming\com.makeblock.Scratch3.4.11 /E /C /Y
..... ça ne fonctionne pas.... pas plus qu'avec %appdata%

:'( .... ne peut-on pas interagir avec l'appdata du current user tandis qu'un paquet est déployé?
Avatar de l’utilisateur
sfonteneau
Expert WAPT
Messages : 1783
Inscription : 10 juil. 2014 - 23:52
Contact :

31 déc. 2017 - 18:15

myosotis a écrit : 31 déc. 2017 - 16:06 Ne peut-on pas interagir avec l'appdata du current user tandis qu'un paquet est déployé?
On peut mais c'est plus compliqué, le session setup rend les chose plus simple:

Code : Tout sélectionner

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

uninstallkey = []

key = "{1E9DFEBB-4088-4693-A521-C755318BD492}_is1"

profil_name = 'com.makeblock.Scratch3.4.11'
profil_mblock_appdata = makepath('c:','ProgramData','mblock',profil_name)
profil_mblock = makepath(application_data(),profil_name)

def install():

        versionpaquet = control['version'].split('-',1)[0]

        print('Importation des drivers')

        with disable_file_system_redirection():
             run('regedit.exe /s usbserial_arduino.reg')
             run(r'"%s" /VERYSILENT' % makepath('drivers','Driver_for_Windows.exe'))

        print('installing aiz-mblock')
        install_exe_if_needed("mBlock_win_V"+versionpaquet+".exe",
                            silentflags="/VERYSILENT",
                            key=key,
                            min_version=versionpaquet,
                            killbefore="mBlock.exe")

        #suppression de la clé de désinstallation pour pouvoir faire une désinstallation silencieuse. Voir def uninstall():
        uninstallkey.remove(key)

        #suppression du raccourci bureau
        remove_desktop_shortcut('mBlock')


        if isdir(profil_mblock_appdata):
            remove_tree(profil_mblock_appdata)
        copytree2(profil_name,profil_mblock_appdata)


def session_setup():
    if isdir(profil_mblock):
        remove_tree(profil_mblock)
    copytree2(profil_mblock_appdata,profil_mblock)

def uninstall():
    print('uninstalling aiz-mblock')
    run(r'"%s\unins000.exe" /VERYSILENT' % install_location(key))

Le profil "com.makeblock.Scratch3.4.11" sera écrasé a la prochaine ouverture de session.
De cette manière même si le profil de l'utilisateur n'existe pas encore ça fonctionnera très bien !

N'oubliez pas d'incrémenter le numéro de version du paquet après chaque modification du session setup !
myosotis
Messages : 5
Inscription : 26 déc. 2017 - 16:34

09 janv. 2018 - 16:11

Bonjour sfonteneau,

après de multiples tests et essais, nous n'avons toujours pas réussi à atteindre l'appdata du user qui fait descendre le paquet, en somme l'objectif initial n'est pas atteint.

Malgré tout la mécanique proposée et jouée via le session_setup() fonctionne, et donc à la re ouverture de session le soft est francisé.

Enfin je vous propose une petite modif à votre excellent script: Modif de la variable profil_mblock_appdata. Vu qu'elle est utilisée ensuite en raw, il était nécessaire de la déterminer ainsi: profil_mblock_appdata = makepath('c:\\','ProgramData','mblock',profil_name)


Meilleurs voeux! Merci pour votre aide. A mon avis le sujet est résolu. Certaines limites sont atteintes.
Avatar de l’utilisateur
sfonteneau
Expert WAPT
Messages : 1783
Inscription : 10 juil. 2014 - 23:52
Contact :

09 janv. 2018 - 19:20

myosotis a écrit : 09 janv. 2018 - 16:11
Enfin je vous propose une petite modif à votre excellent script: Modif de la variable profil_mblock_appdata. Vu qu'elle est utilisée ensuite en raw, il était nécessaire de la déterminer ainsi: profil_mblock_appdata = makepath('c:\\','ProgramData','mblock',profil_name)
Pas de soucis chez moi, quelle est version de wapt avez vous ?
myosotis a écrit : 09 janv. 2018 - 16:11 Certaines limites sont atteintes.
Si vraiment vous voulez copier ce dossier lors de l'installation il faut faire quelque chose du genre :

Code : Tout sélectionner

for locprof in local_users_profiles():
        if isdir(makepath(locprof,'AppData','Roaming',profil_name)):
        	remove_tree(makepath(locprof,'AppData','Roaming',profil_name))
	copytree2(profil_name,makepath(locprof,'AppData','Roaming',profil_name))
Ce qui signifie donc couper le mblock en cours d’exécution ?
Verrouillé