Checho's Blog

Talking about Windows Internals, Deployment and Troubleshooting

Artículos recientes

News and Awards

Follow me on Twitter and LinkedIn

@secalderonr

View Sergio Calderon's profile on LinkedIn

Recomendados

Tags

Community

Email Notifications

Archives

Habilitar el Modo de Compatibilidad de una Aplicación para todos los usuarios utilizando el Editor de Registro en Windows 7

APC

Hola a todos,

Después de 39 artículos técnicos escritos en este Blog durante todo este año, llegamos finalmente al último post que cierra completamente el 2011.

Actualmente, el flamante 7 tiene la gran ventaja de ser Compatible con una gran mayoría de aplicaciones del mercado, incluso para algunas que no han evolucionado a Windows 7. Pero, no deja de existir el problema con aplicaciones “In house” o “A la medida” que manejan actualmente muchas compañías, y que además, se encuentran tal vez las más críticas para la organización, lo que representa por supuesto, un camino un poco más complejo para migrar todas las máquinas al nuevo sistema operativo.

Para fortuna de nosotros, con una gran cantidad, basta con utilizar algunas herramientas de Microsoft como ACT (Application Compatibility Toolkit) o las más poderosas de Sysinternals para detectar por qué en realidad las aplicaciones no parecen funcionar de manera nativa correctamente.

Esto sin embargo, no queda aquí, muchas de estas aplicaciones no están desarrolladas correctamente, a primera vista, parece que sólo corrieran en Windows XP, pero si utilizamos una de las características embebidas en Windows 7, denominada las Fichas de Compatibilidad, veremos que muchas, de repente, ya funcionan bien. :)

Para habilitar las Fichas de Compatibilidad, basta con hacer clic derecho sobre el ejecutable o accedo directo de la aplicación, seleccionar Propiedades, ir a la pestaña de Compatibilidad y seleccionar el item de “Ejecutar este programa en modo de compatibilidad para” escogiendo uno de los sistemas operativos desplegados abajo:

image

Esta configuración se puede aplicar para todos los usuarios fácilmente, basta con hacer clic en el botón inferior de “Cambiar configuración para todos los usuarios” y tendremos la misma ventana donde podremos especificar el modo que se guardará para la aplicación sin importar el usuario que inicie sesión:

image

La pregunta es: ¿Qué es lo que hace el Modo de Compatibilidad para que varias aplicaciones funcionen?
La respuesta se puede reproducir a nivel general en una palabra: ¡Mentir!

Windows internamente, una vez habilitado el modo de compatibilidad para alguna versión anterior, es interceptar la llamada que hace la aplicación al sistema para verificar, entre otras cosas, la versión del sistema operativo sobre el que está corriendo, y devolverle el resultado que espera, en las mayorías de las ocasiones –Que uno selecciona-, es decirle a la aplicación que está sobre Windows XP Service Pack 3 y no sobre Windows 7 Service Pack 1 por ejemplo. A esto se le llama: Mentira sobre versión.

Las aplicaciones que no están bien desarrolladas para medir si la plataforma sobre la que están corriendo sí es la apropiada, suelen comprobar a veces hasta con un número de versión para decir si son compatibles o no, el mentir sobre la versión solventa esto, y por eso la aplicación sigue corriendo como debería.

*Nota: Estas capas de compatibilidad hacen más tareas internamente, pero aquí estoy especificando el concepto de esta característica a nivel general con objetivos del post.

Ahora, nosotros no tenemos que preocuparnos cómo hace Windows realmente este engaño, pero para poder reproducirlo y personalizarlo, debemos aprender dónde consulta Windows las aplicaciones a las que les debe establecer el modo de compatibilidad.

Para el resto de este post, tomaré de referencia la aplicación UltraISO instalada en una máquina mía para seguir y explicar el procedimiento.

Si utilizamos Process Monitor de Sysinternals para seguir el comportamiento de Windows mientras habilito el modo de compatibilidad con Windows XP como mencioné anteriormente, y luego veo la traza que deja, podremos ver esto:

c1

La cuarta operación de la captura, muestra que al momento de establecer la Compatibilidad, Windows hace uso de la función RegSetValue para escribir el valor con la ruta completa del Ejecutable al que queremos engañar en la clave:

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

En este caso, el valor mío fue la ruta a UltraISO, es decir:
C:\Program Files (x86)\UltraISO\UltraISO.exe

Si desde Procmon accedemos al Registro, el valor por cada aplicación que se le indique el modo de compatibilidad se vería así:

image

Como nombre de Valor, la ruta completa como lo especificaba Process Monitor, y como contenido de valor (Data) el sistema operativo al que se quiere emular, en este caso WINXPSP3 que corresponde a Windows XP con Service Pack 3.

En este orden de ideas, es todo lo que Windows escribe en el registro, y lo único que necesita para saber que la ruta y el contenido especificado le dirán a qué aplicación debe mentir, y con qué sistema operativo.

Como ven, el procedimiento manual es realmente muy sencillo, pero habrán ocasiones en que como todo buen IT PRO, se quiere automatizar para ganar tiempo y productividad.

En este caso, el cambio en el Registro se podría hacer en el usuario para el que se vaya a copiar el perfil predeterminado con algún método ya conocido, o bien se puede cargar el Hive para personalizar la rama de HKCU predeterminada, o hasta cargar el Hive antes de instalar Windows para que se vuelva una configuración lista justo antes de la instalación; la decisión es de cada uno.

Esto valdría para el usuario actual, pero en caso de que la aplicación sea algo más general, para varias máquinas y usuarios, se puede forzar a que esté en este modo para todos y que no se pueda cambiar.

Modo de Compatibilidad para todos los usuarios

Predeterminadamente, Windows ya busca si existen aplicaciones en la lista de Layers para toda la máquina:

c2

El resultado, sin embargo, es NAME NOT FOUND (No encontrado), lo que indica que la clave Layers no está creada de forma predeterminada.

En este caso entonces, lo que haré será indicar el ejecutable de mi aplicación UltraISO para que se comporte en modo de compatibilidad con Windows XP para todos los usuarios que inicien sesión.

El procedimiento es exactamente el mismo, lo único que deben cambiar es la ruta del ejecutable.

*Nota: Deben tener en cuenta la ruta completa del ejecutable, incluyendo la extensión, por ejemplo para el mío sería: C:\Program Files (x86)\UltraISO\UltraISO.exe

Lo que haremos, básicamente, será crear la clave que hace falta y hacer uso de los valores que se pueden establecer, y que sería lo que Windows haría en caso de cambiar la configuración para todos los usuarios.

Debemos hacer clic en Inicio, y ejecutar Regedit.exe para abrir el Editor de Registro de Windows.

Navegamos hasta la clave:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags

Clic derecho sobre la clave AppCompatFlags, seleccionamos en el menú contextual Nuevo (New) y clic en Clave (Key):

image

Como nombre de clave, la debemos llamar Layers

image

Nos situamos sobre Layers, en la parte derecha, debajo del Valor predeterminado y en un espacio en blanco, clic derecho, Nuevo (New), Valor de cadena (String):

image

El nombre del Valor, debe ser la ruta completa de la aplicación, para mi caso por ejemplo, sería: C:\Program Files (x86)\UltraISO\UltraISO.exe

image

Aquí está especificado la aplicación, pero todavía no la capa sobre mentira de versión, para esto, hacemos doble clic en el valor y en el contenido le debemos especificar la variable correspondiente al sistema operativo a emular, pondré dos de las principales correspondientes a Windows XP:

Windows XP Service Pack 2: WINXPSP2
Windows XP Service Pack 3: WINXPSP3

En mi caso, como era con Service Pack 3, la variable fue: WINXPSP3

image
Bastará con aceptar el cambio y ¡Listo! Nuestra aplicación ya maneja el modo de compatibilidad sin importar el usuario que inicie sesión, para verificarlo, basta con entrar con otro usuario, ir a las propiedades del ejecutable y pestaña de Compatibilidad:

image

Espero que les pueda ser de utilidad, y no siendo más, sólo queda por decir:

¡Muchas gracias y Feliz Año Nuevo!

Checho

Posted: 28/12/2011 21:15 por Checho | con 1 comment(s)
Comparte este post:

Comentarios

Checho's Blog ha opinado:

Hola a todos, Antes que nada, espero que este sea un gran año para todos ustedes. Cuando una compañía

# January 4, 2012 10:09 PM