Página 1 de 1

Problema al ejecutar la función session_setup()

Publicado: 29 de septiembre de 2025 - 17:30
por brice73
Buen día,

Tengo un paquete que necesita eliminar dos valores de una clave de registro (si existen) dentro de la función session_setup. Aquí está el código:

Código: Seleccionar todo

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 vez instalado el paquete y cuando un usuario para el que existen ambos valores en la clave inicia sesión, estos dos valores no se eliminan.

Si abro un símbolo del sistema y ejecuto manualmente la función de configuración de sesión para este paquete, obtengo el siguiente error:

Código: Seleccionar todo

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
Sin embargo, si abro un símbolo del sistema con privilegios de administrador y ejecuto la función session-setup para este paquete, se ejecuta correctamente (verifico que los 2 valores en la clave de registro efectivamente están eliminados):

Código: Seleccionar todo

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
¿De dónde podría provenir el problema y hay alguna manera de hacer que la función session-setup() se ejecute automáticamente para cada usuario cuando inicia sesión?

Re: Problema al ejecutar la función session_setup()

Publicado: 30 de septiembre de 2025 - 12:45 p. m.
por sfonteneau
Hola

, parece que no es posible porque las ACL configuradas por defecto en "Políticas" no permiten al usuario modificar esta clave.

La configuración de la sesión se ejecuta con privilegios de usuario y, por lo tanto, no tiene los permisos necesarios.

Re: Problema al ejecutar la función session_setup()

Publicado: 7 de octubre de 2025 - 19:29
por brice73
Hola Simon,

gracias por tu respuesta. Aunque parezca ilógico, creía que session_setup() se ejecutaba con privilegios de cuenta de sistema... Encontré otra forma de hacerlo (usando LGPO.exe).

Puedes marcar el hilo como resuelto.

Saludos.

Re: Problema al ejecutar la función session_setup()

Publicado: 8 de octubre de 2025 - 9:39 a. m.
por dcardon
Hola Brice,
brice73 escribió: 7 de oct. de 2025 - 19:29
Gracias por tu respuesta. Aunque no es muy lógico, pensé que session_setup() se ejecutaba con privilegios de cuenta del sistema... Encontré otra forma de hacerlo (usando LGPO.exe).

Puedes marcar el hilo como resuelto.
Gracias por tus comentarios. Si tienes el archivo setup.py a mano, compártelo. Si ya hiciste esta pregunta, es probable que otros tengan la misma.

Nota: lgpo.exe es gratuito pero no se puede redistribuir (licencia propietaria restrictiva y explícita de Microsoft sobre el tema), por lo que no se puede poner en la tienda, pero aún así puede servir como ejemplo para otros.

Atentamente,

Denis

Re: Problema al ejecutar la función session_setup()

Publicado: 10 de octubre de 2025 - 10:12 a. m.
por brice73
Hola Denis,

Por qué no, no me pareció útil (el setup.py también es muy corto).

Un archivo breve (en formato PDF) de Microsoft sobre el uso de LGPO.exe es bastante explícito. Varios paquetes de nuestra infraestructura utilizan LGPO.exe para configurar GPO locales (además de los GPO habilitados a nivel de dominio en Active Directory).

Para deshabilitar una GPO de usuario, inicialmente pensé que era mejor y más simple usar session_setup(), para los usuarios para los que la GPO ya había sido activada porque estaba causando la creación de claves en HKCU, que parecía suficiente eliminar a priori.

Así que terminé reutilizando LGPO para deshabilitar la GPO de usuario en cuestión para todos los usuarios. A continuación se muestra el archivo setup.py con algunos comentarios sobre su uso (aunque la documentación de Microsoft es mucho más completa).

Código: Seleccionar todo

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

Puedes marcar el hilo como resuelto. Gracias

Atentamente,