[RESUELTO] Mblock Setup.py

Preguntas sobre paquetes WAPT / Solicitudes y ayuda sobre paquetes WAPT.
Reglas del foro
Reglas del foro de la comunidad
* Soporte en inglés en www.reddit.com/r/wapt
* El soporte de la comunidad en francés está disponible en este foro
* Por favor, anteponga [RESUELTO] al título del tema si está resuelto.
* Por favor, no edite un tema que esté etiquetado como [RESUELTO]. Abra un nuevo tema haciendo referencia al anterior.
* Especifique la versión de WAPT instalada, la versión completa y el número de compilación (2.2.1.11957 / 2.2.2.12337 / etc.), así como la edición Enterprise/Discovery.
* Las versiones 1.8.2 y anteriores ya no son compatibles. Las únicas preguntas aceptadas sobre la versión 1.8.2 están relacionadas con la actualización a una versión compatible (2.1, 2.2, etc.).
* Especifique el sistema operativo del servidor (Linux/Windows) y la versión (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019).
* Especifique el sistema operativo de la máquina de administración/creación de paquetes y de la máquina con el agente problemático, si corresponde (Windows 7/10/11/Debian 11/etc.).
* Evite hacer varias preguntas al abrir un tema, ya que podría ser ignorado. Si hay varios temas, ábralos por separado, preferiblemente uno tras otro y no todos a la vez (es decir, no sature el foro con spam).
* Incluya fragmentos de código, capturas de pantalla y otras imágenes directamente en la publicación. Los enlaces a Pastebin, Bitly y otros sitios de terceros serán eliminados sistemáticamente.
* Como en cualquier foro comunitario, el soporte es proporcionado voluntariamente por los miembros. Si necesita soporte comercial, puede comunicarse con el departamento de ventas de Tranquil IT al 02.40.97.57.55.
Avatar de usuario
Sfonteneau
Experto en WAPT
Mensajes: 2312
Registrado: 10 de julio de 2014 - 23:52
Contacto :

29 de diciembre de 2017 - 12:31

Código: Seleccionar todo

sfonteneau, pour éviter de perdre du temps et faire ça bien, peux-tu nous aider dans la rédaction du session_setup STP?
Si tienes un método que funciona siempre, sí, puedo.. :) Pero por ahora no está del todo claro

La solución más sencilla en este caso sería contactar con un desarrollador:

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

En última instancia, en mi opinión, el software acabará detectando el idioma del sistema durante el primer inicio :D y establezca este idioma como predeterminado al inicio.

Ya me he puesto en contacto con algunos desarrolladores de aplicaciones sobre este tipo de cosas y suelen ser bastante receptivos.

Tú decides !
nomeolvides
Mensajes: 5
Registrado: 26 de diciembre de 2017 - 16:34

29 de diciembre de 2017 - 14:34

Esto implica copiar un archivo /com.makeblock.Scratch3.4.11/Local Store "formateado" en francés en el directorio AppData/Roming/ de cada usuario
, y también asegurarse de que funcione para el usuario interactivo o actual, también en francés...
Avatar de usuario
Sfonteneau
Experto en WAPT
Mensajes: 2312
Registrado: 10 de julio de 2014 - 23:52
Contacto :

29 de diciembre de 2017 - 17:18

myosotis escribió: 29 de diciembre de 2017 - 14:34 Implica copiar un archivo /com.makeblock.Scratch3.4.11/Local Store "formateado" en francés en el directorio AppData/Roming/ de cada usuario
y también asegurarse de que funcione para el usuario interactivo o actual, también en francés...
Para la parte:
myosotis escribió: 29 de diciembre de 2017 - 14:34 Asegúrate también de que funcione para el usuario interactivo o actual, en francés.
No lo entiendo muy bien.

Por otro lado, puedes crear un com.makeblock.Scratch3.4.11 funcional, copiarlo durante def install() en una carpeta en la máquina y luego copiarlo a la inversa durante session_setup en el %appdata% del usuario.

La siguiente pregunta es qué hacer si la carpeta com.makeblock.Scratch3.4.11 ya existe durante la configuración de la sesión. ¿La sobrescribimos, incluso si el usuario ya ha configurado sus ajustes? ¿O simplemente la sobrescribimos?

https://dev.tranquil.it/sphinxdocs/sour....copytree2
nomeolvides
Mensajes: 5
Registrado: 26 de diciembre de 2017 - 16:34

29 de diciembre de 2017 - 18:12

Intentaré copiar mi código lo antes posible. Muchas gracias por tu ayuda.

Intenté usar copytree2. Funciona en una ruta que no es relativa al usuario (lo hago como requisito previo, ya que una configuración de sesión() impide el acceso a un archivo o carpeta proporcionados en el paquete; así que copio "mi código fuente" del paquete a una carpeta en ProgramData y luego intento acceder a él... sin éxito hasta ahora).

Sobrescribir la carpeta personal en AppData no es una opción. En nuestro entorno de producción, no se recomienda que el usuario guarde nada localmente.

Releyendo tu mensaje, tengo la impresión de que el enfoque no debería estar en el usuario, sino en AppData. ¿Quizás ahí es donde me equivoco...?
nomeolvides
Mensajes: 5
Registrado: 26 de diciembre de 2017 - 16:34

31 de diciembre de 2017 - 16:06

Código: Seleccionar todo

# -*- 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 de mi cmd

Código: Seleccionar todo

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
...no funciona...no más que con %appdata%

:'( .... ¿no podemos interactuar con los datos de la aplicación del usuario actual mientras se implementa un paquete?
Avatar de usuario
Sfonteneau
Experto en WAPT
Mensajes: 2312
Registrado: 10 de julio de 2014 - 23:52
Contacto :

31 de diciembre de 2017 - 18:15

myosotis escribió: 31 de diciembre de 2017 - 16:06 ¿No podemos interactuar con los datos de la aplicación del usuario actual mientras se está implementando un paquete?
Es posible, pero es más complicado; la configuración de la sesión simplifica las cosas:

Código: Seleccionar todo

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

El perfil "com.makeblock.Scratch3.4.11" se sobrescribirá en el próximo inicio de sesión.
¡De esta manera, incluso si el perfil de usuario aún no existe, funcionará perfectamente!

¡No olvides incrementar el número de versión del paquete después de cada modificación en la configuración de la sesión!
nomeolvides
Mensajes: 5
Registrado: 26 de diciembre de 2017 - 16:34

9 de enero de 2018 - 16:11

Hola sfonteneau,

después de múltiples pruebas e intentos, todavía no hemos logrado acceder a los datos de la aplicación del usuario que descarga el paquete; en resumen, el objetivo inicial no se ha logrado.

Sin embargo, el mecanismo propuesto, implementado a través de session_setup(), funciona y, por lo tanto, al reabrir la sesión, el software está en francés.

Finalmente, sugiero una pequeña modificación a tu excelente script: Modifica la variable profil_mblock_appdata. Dado que luego se usa en modo raw, fue necesario definirla como sigue: profil_mblock_appdata = makepath('c:\\', 'ProgramData', 'mblock', profil_name).


¡Saludos! Gracias por tu ayuda. En mi opinión, el problema está resuelto. Se han alcanzado algunas limitaciones.
Avatar de usuario
Sfonteneau
Experto en WAPT
Mensajes: 2312
Registrado: 10 de julio de 2014 - 23:52
Contacto :

9 de enero de 2018 - 19:20

myosotis escribió: 9 de enero de 2018 - 16:11
Finalmente, sugiero una pequeña modificación a su excelente script: Modificación de la variable profil_mblock_appdata. Dado que luego se usa en formato sin procesar, fue necesario definirla de esta manera: profil_mblock_appdata = makepath('c:\\','ProgramData','mblock',profil_name)
No hay problema aquí, ¿qué versión de Wapt tienes?
myosotis escribió: 9 de enero de 2018 - 4:11 PM Se han alcanzado algunos límites.
Si realmente desea copiar esta carpeta durante la instalación, debe hacer algo como esto:

Código: Seleccionar todo

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))
Entonces, ¿eso significa detener el mblock que se está ejecutando actualmente?
Bloqueado