Pagina 2 di 2

Re: Mblock Setup.py

Pubblicato: 29 dicembre 2017 - 12:31
di sfontenau

Codice: Seleziona tutto

sfonteneau, pour éviter de perdre du temps et faire ça bien, peux-tu nous aider dans la rédaction du session_setup STP?
Se hai un metodo che funziona sempre, sì, posso.. :) Ma per ora è un po' poco chiaro

La soluzione più semplice in questo caso sarebbe contattare uno sviluppatore:

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

Alla fine, secondo me, il software rileverà la lingua del sistema al primo avvio :D e imposta questa lingua come predefinita all'avvio.

Ho già contattato alcuni sviluppatori di applicazioni per questo genere di cose e sono stati molto disponibili.

Sta a te !

Re: Mblock Setup.py

Pubblicato: 29 dicembre 2017 - 14:34
di myosotis
Ciò comporta la copia di un file /com.makeblock.Scratch3.4.11/Local Store "formattato" in francese nella directory AppData/Roming/ di ciascun utente
, e la verifica che funzioni anche per l'utente interattivo o corrente, sempre in francese...

Re: Mblock Setup.py

Pubblicato: 29 dicembre 2017 - 17:18
di sfontenau
myosotis ha scritto: 29 dic 2017 - 14:34 Si tratta di copiare un file /com.makeblock.Scratch3.4.11/Local Store "formattato" in francese nella directory AppData/Roming/ di ciascun utente
e di assicurarsi che funzioni anche per l'utente interattivo o corrente, in francese...
Per la parte:
myosotis ha scritto: 29 dic 2017 - 14:34 Assicurati inoltre che funzioni anche per l'utente interattivo o corrente, in francese
Non capisco bene.

D'altro canto, puoi effettivamente creare un com.makeblock.Scratch3.4.11 funzionante, copiarlo durante def install() in una cartella sulla macchina e poi copiarlo al contrario durante session_setup nella cartella %appdata% dell'utente.

La domanda successiva è cosa fare se la cartella com.makeblock.Scratch3.4.11 esiste già durante la configurazione della sessione. La sovrascriviamo, anche se l'utente ha già configurato le proprie impostazioni? Oppure la sovrascriviamo e basta?

https://dev.tranquil.it/sphinxdocs/sour....copytree2

Re: Mblock Setup.py

Pubblicato: 29 dicembre 2017 - 18:12
di myosotis
Cercherò di copiare il mio codice per te il prima possibile. Grazie mille per il tuo aiuto.

Ho provato a usare copytree2. Funziona su un percorso non relativo all'utente (lo faccio come prerequisito perché un setup() della sessione impedisce l'accesso a un file o una cartella forniti nel pacchetto; quindi copio "il mio codice sorgente" dal pacchetto in una cartella in ProgramData e poi provo ad accedervi... finora senza successo).

Sovrascrivere la cartella personale in AppData non è un'opzione. Nel nostro ambiente di produzione, l'utente non è incoraggiato a salvare nulla in locale.

Rileggendo il tuo messaggio, ho l'impressione che l'attenzione non dovrebbe essere sull'utente, ma su AppData. Forse è qui che sbaglio...?!!

Re: Mblock Setup.py

Pubblicato: 31 dicembre 2017 - 16:06
di myosotis

Codice: Seleziona tutto

# -*- 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"')
+ Copia del mio cmd

Codice: Seleziona tutto

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
...non funziona...non più di quanto non funzioni con %appdata%

:'( .... non possiamo interagire con i dati dell'app dell'utente corrente mentre viene distribuito un pacchetto?

Re: Mblock Setup.py

Pubblicato: 31 dicembre 2017 - 18:15
di sfontenau
myosotis ha scritto: 31 dic 2017 - 16:06 Non possiamo interagire con i dati dell'app dell'utente corrente mentre un pacchetto viene distribuito?
È possibile, ma è più complicato; la configurazione della sessione semplifica le cose:

Codice: Seleziona tutto

# -*- 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))

Il profilo "com.makeblock.Scratch3.4.11" verrà sovrascritto al prossimo accesso.
In questo modo, anche se il profilo utente non esiste ancora, funzionerà perfettamente!

Non dimenticare di incrementare il numero di versione del pacchetto dopo ogni modifica alla configurazione della sessione!

Re: Mblock Setup.py

Pubblicato: 9 gennaio 2018 - 16:11
di myosotis
Ciao sfonteneau,

dopo diversi test e tentativi, non siamo ancora riusciti ad accedere ai dati dell'applicazione dell'utente che scarica il pacchetto; in breve, l'obiettivo iniziale non è stato raggiunto.

Tuttavia, il meccanismo proposto, implementato tramite session_setup(), funziona e, di conseguenza, alla riapertura della sessione, il software è in francese.

Infine, suggerisco una piccola modifica al tuo eccellente script: modifica la variabile profil_mblock_appdata. Poiché viene poi utilizzata in modalità raw, è stato necessario definirla come segue: profil_mblock_appdata = makepath('c:\\', 'ProgramData', 'mblock', profil_name).


Cordiali saluti! Grazie per l'aiuto. A mio parere, il problema è risolto. Sono stati raggiunti alcuni limiti.

Re: Mblock Setup.py

Pubblicato: 9 gennaio 2018 - 19:20
di sfontenau
myosotis ha scritto: 9 gennaio 2018 - 16:11
Infine, suggerisco una piccola modifica al tuo eccellente script: Modifica della variabile profil_mblock_appdata. Poiché viene poi utilizzata in formato raw, è stato necessario definirla in questo modo: profil_mblock_appdata = makepath('c:\\','ProgramData','mblock',profil_name)
Nessun problema, che versione di Wapt hai?
myosotis ha scritto: 9 gennaio 2018 - 16:11 Alcuni limiti sono stati raggiunti.
Se vuoi davvero copiare questa cartella durante l'installazione, devi fare qualcosa del genere:

Codice: Seleziona tutto

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))
Quindi, questo significa arrestare l'mblock attualmente in esecuzione?