[GELÖST] Mblock Setup.py

Fragen zu WAPT-Paketen / Anfragen und Hilfe bezüglich WAPT-Paketen.
Forumregeln
Community-Forumregeln
* Englischer Support auf www.reddit.com/r/wapt
* Französischer Community-Support ist in diesem Forum verfügbar.
* Bitte kennzeichnen Sie gelöste Themen mit [GELÖST].
* Bitte bearbeiten Sie keine Themen, die mit [GELÖST] markiert sind. Erstellen Sie stattdessen ein neues Thema und verweisen Sie auf das alte.
* Geben Sie die installierte WAPT-Version, die vollständige Versionsnummer und die Build-Nummer (2.2.1.11957 / 2.2.2.12337 / usw.) sowie die Enterprise-/Discovery-Edition an.
* Versionen 1.8.2 und älter werden nicht mehr unterstützt. Fragen zu Version 1.8.2 werden nur beantwortet, wenn sie sich auf ein Upgrade auf eine unterstützte Version (2.1, 2.2 usw.) beziehen.
* Geben Sie das Server-Betriebssystem (Linux/Windows) und die Version (Debian Buster/Bullseye – CentOS 7 – Windows Server 2012/2016/2019) an.
* Geben Sie gegebenenfalls das Betriebssystem des Administrations-/Paketerstellungsrechners und des Rechners mit dem problematischen Agenten an (Windows 7/10/11/Debian 11/etc.).
* Vermeiden Sie es, mehrere Fragen in einem Thema zu stellen, da diese sonst möglicherweise ignoriert werden. Falls mehrere Themen relevant sind, erstellen Sie bitte separate Themen, vorzugsweise nacheinander und nicht gleichzeitig (d. h. vermeiden Sie Spam im Forum).
* Fügen Sie Code-Snippets, Screenshots und andere Bilder direkt in Ihren Beitrag ein. Links zu Pastebin, Bitly und anderen Drittanbieterseiten werden systematisch entfernt.
* Wie in jedem Community-Forum erfolgt die Unterstützung freiwillig durch die Mitglieder. Für kommerziellen Support kontaktieren Sie bitte den Vertrieb von Tranquil IT unter +44 2 40 97 57 55.
Benutzeravatar
Sfonteneau
WAPT-Experte
Nachrichten: 2322
Registriert: 10. Juli 2014 - 23:52 Uhr
Kontakt:

29. Dezember 2017 - 12:31 Uhr

Code: Alle auswählen

sfonteneau, pour éviter de perdre du temps et faire ça bien, peux-tu nous aider dans la rédaction du session_setup STP?
Wenn Sie eine Methode haben, die immer funktioniert, ja, dann kann ich das.. :) Aber im Moment ist es noch etwas unklar

Die einfachste Lösung in diesem Fall wäre, einen Entwickler zu kontaktieren:

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

Meiner Meinung nach wird es letztendlich darauf hinauslaufen, dass die Software die Systemsprache beim ersten Start erkennt :D und diese Sprache beim Systemstart als Standardsprache festlegen.

Ich habe diesbezüglich bereits einige Anwendungsentwickler kontaktiert, und diese sind recht aufgeschlossen.

Wie du willst !
Vergissmeinnicht
Nachrichten: 5
Registriert: 26. Dezember 2017 - 16:34 Uhr

29. Dezember 2017 – 14:34 Uhr

Dies beinhaltet das Kopieren einer in Französisch formatierten Datei aus dem Verzeichnis /com.makeblock.Scratch3.4.11/Local Store in das Verzeichnis AppData/Roming/ jedes Benutzers
und die Sicherstellung, dass sie auch für den interaktiven bzw. aktuellen Benutzer in Französisch funktioniert.
Benutzeravatar
Sfonteneau
WAPT-Experte
Nachrichten: 2322
Registriert: 10. Juli 2014 - 23:52 Uhr
Kontakt:

29. Dezember 2017 – 17:18 Uhr

myosotis schrieb: 29. Dez. 2017 - 14:34 Uhr Es geht darum, eine in Französisch formatierte Datei namens /com.makeblock.Scratch3.4.11/Local Store in das Verzeichnis AppData/Roming/ jedes Benutzers zu kopieren
und sicherzustellen, dass sie auch für den aktuellen Benutzer auf Französisch funktioniert.
Zum Teil:
myosotis schrieb: 29. Dez. 2017 - 14:34 Uhr Bitte stellen Sie außerdem sicher, dass es sowohl für interaktive als auch für aktuelle Benutzer auf Französisch funktioniert.
Ich verstehe das nicht ganz.

Andererseits können Sie tatsächlich eine funktionierende com.makeblock.Scratch3.4.11 erstellen, diese während der def install() in einen Ordner auf dem Rechner kopieren und sie dann während der session_setup in umgekehrter Richtung in den %appdata%-Ordner des Benutzers kopieren.

Die nächste Frage ist, was zu tun ist, wenn der Ordner „com.makeblock.Scratch3.4.11“ bei der Sitzungseinrichtung bereits existiert. Soll er überschrieben werden, auch wenn der Benutzer seine Einstellungen bereits konfiguriert hat? Oder soll er einfach überschrieben werden?

https://dev.tranquil.it/sphinxdocs/sour....copytree2
Vergissmeinnicht
Nachrichten: 5
Registriert: 26. Dezember 2017 - 16:34 Uhr

29. Dezember 2017 – 18:12 Uhr

Ich versuche, Ihnen meinen Code so schnell wie möglich zu kopieren. Vielen Dank für Ihre Hilfe.

Ich habe copytree2 bereits ausprobiert. Es funktioniert mit einem Pfad, der nicht relativ zum Benutzerpfad ist (ich mache das als Voraussetzung, da session setup() den Zugriff auf eine im Paket enthaltene Datei oder einen Ordner verhindert; daher kopiere ich meinen Quellcode aus dem Paket in einen Ordner in ProgramData und versuche dann darauf zuzugreifen ... bisher ohne Erfolg).

Das Überschreiben des persönlichen Ordners in AppData ist keine Option. In unserer Produktionsumgebung wird Benutzern nicht empfohlen, lokal zu speichern.

Beim erneuten Lesen Ihrer Nachricht habe ich den Eindruck, dass der Fokus nicht auf dem Benutzer, sondern auf AppData liegen sollte. Vielleicht liegt da mein Fehler ...?!
Vergissmeinnicht
Nachrichten: 5
Registriert: 26. Dezember 2017 - 16:34 Uhr

31. Dezember 2017 – 16:06 Uhr

Code: Alle auswählen

# -*- 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"')
+ Kopie meiner Befehlszeile

Code: Alle auswählen

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
...es funktioniert nicht... genauso wenig wie mit %appdata%

:'( .... Können wir nicht auf die App-Daten des aktuellen Benutzers zugreifen, während ein Paket bereitgestellt wird?
Benutzeravatar
Sfonteneau
WAPT-Experte
Nachrichten: 2322
Registriert: 10. Juli 2014 - 23:52 Uhr
Kontakt:

31. Dezember 2017 – 18:15 Uhr

myosotis schrieb: 31. Dez. 2017 - 16:06 Uhr Können wir nicht mit den App-Daten des aktuellen Benutzers interagieren, während ein Paket bereitgestellt wird?
Es ist möglich, aber komplizierter; die Einrichtung einer Sitzung vereinfacht die Sache:

Code: Alle auswählen

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

Das Profil "com.makeblock.Scratch3.4.11" wird beim nächsten Login überschrieben.
Auf diese Weise funktioniert es einwandfrei, selbst wenn das Benutzerprofil noch nicht existiert!

Vergessen Sie nicht, die Paketversionsnummer nach jeder Änderung an den Sitzungseinstellungen zu erhöhen!
Vergissmeinnicht
Nachrichten: 5
Registriert: 26. Dezember 2017 - 16:34 Uhr

9. Januar 2018 – 16:11 Uhr

Hallo sfonteneau,

nach mehreren Tests und Versuchen ist es uns immer noch nicht gelungen, auf die App-Daten des Benutzers zuzugreifen, der das Paket heruntergeladen hat; kurz gesagt, das ursprüngliche Ziel wurde nicht erreicht.

Der vorgeschlagene Mechanismus, implementiert über session_setup(), funktioniert jedoch, und daher ist die Software nach dem erneuten Öffnen der Sitzung auf Französisch.

Abschließend schlage ich eine kleine Änderung an Ihrem hervorragenden Skript vor: Ändern Sie die Variable profil_mblock_appdata. Da sie dann im Rohmodus verwendet wird, war es notwendig, sie wie folgt zu definieren: profil_mblock_appdata = makepath('c:\\', 'ProgramData', 'mblock', profil_name).


Beste Grüße! Vielen Dank für Ihre Hilfe. Meiner Meinung nach ist das Problem gelöst. Es wurden einige Einschränkungen erreicht.
Benutzeravatar
Sfonteneau
WAPT-Experte
Nachrichten: 2322
Registriert: 10. Juli 2014 - 23:52 Uhr
Kontakt:

9. Januar 2018 – 19:20 Uhr

myosotis schrieb: 9. Januar 2018 - 16:11 Uhr
Abschließend schlage ich eine kleine Änderung an Ihrem hervorragenden Skript vor: Die Variable `profil_mblock_appdata` sollte angepasst werden. Da sie im Rohformat verwendet wird, war es notwendig, sie wie folgt zu definieren: `profil_mblock_appdata = makepath('c:\\','ProgramData','mblock',profil_name)`
Hier gibt es keine Probleme, welche Version von Wapt verwenden Sie?
myosotis schrieb: 9. Januar 2018 - 16:11 Uhr Einige Grenzen wurden erreicht.
Wenn Sie diesen Ordner während der Installation wirklich kopieren möchten, müssen Sie etwa so vorgehen:

Code: Alle auswählen

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))
Bedeutet das also, dass der aktuell laufende mblock gestoppt wird?
Gesperrt