Problema al ejecutar la función session_setup()

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.
Respuesta
brice73
Mensajes: 42
Inscripción: 13 de febrero de 2023 - 8:05 a. m.

29 de septiembre de 2025 - 17:30

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?
WAPT Enterprise 2.6.1.17765
Servidor WAPT bajo Debian 13
Administración/creación de paquetes bajo Windows 11/10
Avatar de usuario
Sfonteneau
Experto en WAPT
Mensajes: 2312
Registrado: 10 de julio de 2014 - 23:52
Contacto :

30 de septiembre de 2025 - 12:45

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.
Archivos adjuntos
Captura.PNG
Captura.PNG (37,49 KB) Visto 15844 veces
brice73
Mensajes: 42
Inscripción: 13 de febrero de 2023 - 8:05 a. m.

7 de octubre de 2025 - 19:29

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.
WAPT Enterprise 2.6.1.17765
Servidor WAPT bajo Debian 13
Administración/creación de paquetes bajo Windows 11/10
Avatar de usuario
dcardón
Experto en WAPT
Mensajes: 1908
Inscripción: 18 de junio de 2014 - 09:58
Ubicación: Saint Sébastien sur Loire
Contacto :

8 de octubre de 2025 - 9:39 AM

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
Denis Cardon - Tranquil IT
¡Comparte tus experiencias en WAPT! Envíanos las URL de tus blogs y artículos en la "Tu opinión del foro y los publicaremos en el de WAPT
brice73
Mensajes: 42
Inscripción: 13 de febrero de 2023 - 8:05 a. m.

10 de octubre de 2025 - 10:12

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,
WAPT Enterprise 2.6.1.17765
Servidor WAPT bajo Debian 13
Administración/creación de paquetes bajo Windows 11/10
Respuesta