problema nell'esecuzione della funzione session_setup()

Domande sul packaging WAPT / Richieste e assistenza sui pacchetti Wapt.
Regole del forum
Regole del forum della community
* Supporto in inglese su www.reddit.com/r/wapt
* Supporto della community in francese disponibile su questo forum
* Si prega di anteporre [RISOLTO] al titolo dell'argomento se è stato risolto.
* Si prega di non modificare un argomento contrassegnato con [RISOLTO]. Aprire un nuovo argomento facendo riferimento a quello precedente.
* Specificare la versione di WAPT installata, la versione completa e il numero di build (2.2.1.11957 / 2.2.2.12337 / ecc.) nonché l'edizione Enterprise/Discovery.
* Le versioni 1.8.2 e precedenti non sono più supportate. Le uniche domande accettate relative alla versione 1.8.2 riguardano l'aggiornamento a una versione supportata (2.1, 2.2, ecc.).
* Specificare il sistema operativo del server (Linux/Windows) e la versione (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019).
* Specificare il sistema operativo della macchina di amministrazione/creazione dei pacchetti e della macchina con l'agente problematico, se applicabile (Windows 7/10/11/Debian 11/ecc.).
* Evitare di porre più domande quando si apre una discussione, altrimenti potrebbe essere ignorata. Se ci sono più discussioni, aprirle separatamente, preferibilmente una dopo l'altra e non tutte contemporaneamente (ovvero, non intasare il forum).
* Includere frammenti di codice, screenshot e altre immagini direttamente nel post. I link a Pastebin, Bitly e altri siti di terze parti verranno sistematicamente rimossi.
* Come in qualsiasi forum della community, il supporto è fornito volontariamente dai membri. Se si necessita di supporto commerciale, è possibile contattare il reparto vendite di Tranquil IT al numero 02.40.97.57.55
Risposta
brice73
Messaggi: 42
Iscrizioni: 13 febbraio 2023 - ore 8:05

29 settembre 2025 - 17:30

Buongiorno,

Ho un pacchetto che deve eliminare due valori da una chiave di registro (se tali valori esistono) all'interno della funzione session_setup. Ecco il codice:

Codice: Seleziona tutto

def session_setup():

    nom_PC=get_computername().lower()

    if "pm" in nom_PC:
        if reg_value_exists(HKEY_CURRENT_USER,'Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System','Wallpaper') :
            registry_delete(HKEY_CURRENT_USER,'Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System','Wallpaper')

        if reg_value_exists(HKEY_CURRENT_USER,'Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System','WallpaperStyle'):   
            registry_delete(HKEY_CURRENT_USER,'Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System','WallpaperStyle')
Una volta installato il pacchetto e quando un utente per il quale esistono entrambi i valori nella chiave effettua l'accesso, questi due valori non vengono eliminati.

Se apro un prompt dei comandi ed eseguo manualmente la funzione session-setup per questo pacchetto, ottengo il seguente errore:

Codice: Seleziona tutto

Microsoft Windows [version 10.0.26100.6584]
(c) Microsoft Corporation. Tous droits réservés.

U:\>wapt-get session-setup col73-pi-fonds-ecran
Using config file: C:\Program Files (x86)\wapt\wapt-get.ini
Configuring col73-pi-fonds-ecran ...
Running session_setup for package col73-pi-fonds-ecran(=0-11) and user test
2025-09-29 17:12:08,371 CRITICAL Fatal error in session_setup function: AttributeError: __enter__:
Traceback (most recent call last):
  File "C:\Program Files (x86)\wapt\waptpackage.py", line 3004, in call_setup_hook
    hookdata = hook_func()
  File "<string>", line 43, in session_setup
  File "C:\Program Files (x86)\wapt\setuphelpers_windows.py", line 3862, in registry_delete
    with reg_openkey_noredir(root, path, sam=KEY_WRITE) as key:
AttributeError: __enter__

2025-09-29 17:12:08,387 CRITICAL session_setup failed for package col73-pi-fonds-ecran(=0-11) and user test
Done
Tuttavia, se apro un prompt dei comandi con privilegi di amministratore ed eseguo la funzione session-setup per questo pacchetto, questa viene eseguita correttamente (verifico che i 2 valori nella chiave di registro siano stati effettivamente eliminati):

Codice: Seleziona tutto

Microsoft Windows [version 10.0.26100.6584]
(c) Microsoft Corporation. Tous droits réservés.

C:\Windows\System32>wapt-get session-setup col73-pi-fonds-ecran
Using config file: C:\Program Files (x86)\wapt\wapt-get.ini
Configuring col73-pi-fonds-ecran ...
Running session_setup for package col73-pi-fonds-ecran(=0-11) and user test
Done
Da dove potrebbe derivare il problema? Esiste un modo per far sì che la funzione session-setup() venga eseguita automaticamente per ogni utente quando effettua l'accesso?
WAPT Enterprise 2.6.1.17765
Server WAPT su Debian 13
Amministrazione/creazione di pacchetti su Windows 11/10
Avatar utente
sfontenau
Esperto WAPT
Messaggi: 2312
Registrato: 10 luglio 2014 - 23:52
Contatto:

30 settembre 2025 - 12:45

Ciao

, a quanto pare non è possibile perché gli ACL impostati di default su "Policies" non consentono all'utente di modificare questa chiave.

Il processo session-setup viene eseguito con privilegi utente e pertanto non dispone delle autorizzazioni necessarie.
Allegati
Cattura.PNG
Capture.PNG (37,49 KB) Visualizzato 15831 volte
brice73
Messaggi: 42
Iscrizioni: 13 febbraio 2023 - ore 8:05

7 ottobre 2025 - 19:29

Ciao Simon,

grazie per la risposta. Anche se è un po' illogico, pensavo che session_setup() venisse eseguito con i privilegi dell'account di sistema... Ho trovato un altro modo per farlo (usando LGPO.exe).

Puoi contrassegnare la discussione come risolta.

Cordiali saluti,
WAPT Enterprise 2.6.1.17765
Server WAPT su Debian 13
Amministrazione/creazione di pacchetti su Windows 11/10
Avatar utente
dcardon
Esperto WAPT
Messaggi: 1908
Registrazione: 18 giugno 2014 - 09:58
Ubicazione: Saint Sébastien sur Loire
Contatto:

8 ottobre 2025 - 9:39

Ciao Brice,
brice73 ha scritto: 7 ott 2025 - 19:29
Grazie per la risposta. Anche se non è molto logico, pensavo che session_setup() venisse eseguito con i privilegi dell'account di sistema... Ho trovato un altro modo per farlo (usando LGPO.exe).

Puoi contrassegnare la discussione come risolta.
Grazie per il tuo feedback. Se hai a portata di mano il file setup.py, non esitare a condividerlo. Se hai posto questa domanda, è probabile che altri ne abbiano una simile.

Nota: lgpo.exe è gratuito ma non può essere ridistribuito (licenza proprietaria Microsoft restrittiva ed esplicita sull'argomento), quindi non può essere messo nello store, ma può comunque servire da esempio per altri.

Sinceramente,

Denis
Denis Cardon - Tranquil IT
Condividi le tue esperienze su WAPT! Inviaci gli URL dei tuoi blog e articoli nella "La tua opinione del forum e li pubblicheremo sul di WAPT
brice73
Messaggi: 42
Iscrizioni: 13 febbraio 2023 - ore 8:05

10 ottobre 2025 - 10:12

Ciao Denis,

Perché no, non mi sembrava utile (anche il file setup.py è molto corto).

Un breve file (in formato PDF) di Microsoft sull'utilizzo di LGPO.exe è piuttosto esplicito. Diversi pacchetti nella nostra infrastruttura utilizzano LGPO.exe per configurare i GPO locali (oltre ai GPO abilitati a livello di dominio in Active Directory).

Per disattivare un GPO utente, inizialmente ho pensato che fosse meglio e più semplice usare session_setup(), per gli utenti per i quali il GPO era già stato attivato perché causava la creazione di chiavi in ​​HKCU, che sembrava sufficiente eliminare a priori.

Quindi, ho finito per riutilizzare LGPO per disabilitare il GPO utente in questione per tutti gli utenti. Di seguito è riportato il file setup.py con alcuni commenti sul suo utilizzo (ma la documentazione Microsoft è molto più completa).

Codice: Seleziona tutto

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

r"""Ce paquet a comme dépendance col73-pi-debloat-windows-peda car il faut auparavant désactiver windows à la une (windows spotlight) qui modifie automatiquement régulièrement les fonds d'écran
"""

def install():

    nom_PC=get_computername().lower()

    #forçage du fonds d'écran seulement pour les postes élèves
    if not "pm" in nom_PC:

        #fixe le fond d'écran (celui par défaut de Windows)
        #GPO Configuration Utilisateur > Modèles d'administration > Bureau > papier peint du bureau > activé)
        #chemin du fonds d'écran appliqué : C:\Windows\Web\Wallpaper\Windows\img0.jpg
        print('poste élève -> paramétrage du fonds d\'écran via gpo locale')
        run_notfatal(r'.\GPO\LGPO.exe /q /u .\GPO\activate_gpo_u_fonds_ecran.pol')
        print('fonds d\'écran paramétré')

        print('forçage des maj gpo')
        run_powershell(r'Start-Process PowerShell -Verb runAs -Wait -ArgumentList "gpupdate /target:user /force"')
        print('forçage des maj gpo effectué')

    else:
        print('poste professeur -> pas de paramétrage du fonds d\'écran')

        #pour l'annulation du forçage déjà effectué sur les postes professeurs dans une version antérieure du paquet
        #GPO Configuration Utilisateur > Modèles d'administration > Bureau > papier peint du bureau > désactivé
        #exporter le fichier de configuration en mode texte avec LGPO.exe, ne conserver que les lignes de désactivation de la gpo (éditer le fichier avec notepad)
        #puis exporter le fichier .txt en fichier .pol toujours avec LGPO.exe -> on obtiens le fichier de désactivation à appliquer

        run_notfatal(r'.\GPO\LGPO.exe /q /u .\GPO\desactivate_gpo_u_fonds_ecran.pol')

        print('forçage des maj gpo')
        run_powershell(r'Start-Process PowerShell -Verb runAs -Wait -ArgumentList "gpupdate /target:user /force"')
        print('forçage des maj gpo effectué')

Puoi contrassegnare la discussione come risolta. Grazie

Sinceramente,
WAPT Enterprise 2.6.1.17765
Server WAPT su Debian 13
Amministrazione/creazione di pacchetti su Windows 11/10
Risposta