¿Por qué las ventanas de ‘Abrir’ no se refrescan al ejecutar como otro usuario?

Ejecutar un programa como otro usuario en Windows funciona bien, excepto que las ventanas de abrir y guardar archivo no se refrescan automáticamente. ¿Es esto un bug o una opción de diseño? La respuesta es clara: es una limitación esperada del modelo de seguridad y aislamiento de sesiones.

Vista de escritorio de Windows con diálogos de archivos abiertos
Entorno de trabajo mostrando el problema de las ventanas no refrescadas.

Este comportamiento ocurre porque cuando ejecutás un programa como otro usuario, ese proceso corre en una sesión diferente. La interfaz de usuario del usuario original no está sincronizada con los eventos de la sesión del otro usuario, por lo que los cambios de contenido en carpetas no se propagan correctamente entre sesiones.

¿Cómo solucionarlo?

Aunque no es un error, hay varias alternativas dependiendo del caso de uso:

  • Ejecutar el programa dentro de la misma sesión: Si es posible, evita ejecutar el programa como otro usuario. Ejecutalo con los privilegios necesarios pero en la misma sesión para mantener los hooks del shell activos.
  • Usar explorer.exe como puente: Un workaround efectivo es iniciar una instancia separada de explorer.exe como el otro usuario, lo que permite a las aplicaciones comportarse más naturalmente.
  • Herramientas de sincronización o notificación: Puedes usar scripts que tocan un archivo para forzar un evento de cambio, o automatizar una llamada a SHChangeNotify vía PowerShell o C++.
  • Automatizar F5: Como último recurso, puedes automatizar el envío de la tecla F5 con herramientas como AutoHotKey para refrescar el diálogo activo.

En conclusión, es un efecto colateral del aislamiento entre sesiones. La solución más limpia es evitar lanzar el programa como otro usuario si no es estrictamente necesario.