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

El archivo (.pps) de Office 2007 y 2010 que no mostraba campos dentro de las Propiedades en Windows 7, Process Monitor y su solución.

imagesCAXCJ7H5

Hola a todos,

Hace unos días, en los espectaculares Foros de Microsoft TechNet, específicamente en el Foro de Windows 7 , un usuario abrió un hilo con un aparente problema que resultó siendo (Por lo menos para mí) un caso sumamente interesante a pesar de que no representaba un fallo en el funcionamiento de Windows como suele suceder normalmente pero que, como con casi todos entrega una gran cantidad de conocimiento al intentar resolverlo.

A continuación, quiero compartirles como siempre en varios items (El problema, la causa y la posible solución) todo este caso con el fin de ver qué tanto nos puede ayudar Sysinternals cuando todo lo demás parece haberse agotado.

El problema

El inconveniente se presenta cuando trabajamos con Office 2007 u Office 2010, específicamente cuando guardamos una presentación de PowerPoint en formato .pps (Para Office 97 y 2003). Cuando queremos acceder a las Propiedades del archivo, pestaña Detalles veremos que no se puede agregar o editar campos adicionales como el Título y el Asunto entre otros, sólo nos permite visualizar unas propiedades estándar del mismo:

PPS1

¿Cuál es el problema? Que si este mismo archivo se guarda con el formato predeterminado para Office 2007 y 2010 (.ppsx) podremos ver todos los campos que especifican los detalles del archivo en cuestión y además se podrán editar:

PPS2

Esto solo pasa (Y estaba pasando) con este tipo de extensión (.pps) que es la que maneja predeterminadamente PowerPoint 2003 pero que utilizan las versiones superiores para mantener esta misma compatibilidad con versiones inferiores.

Sin embargo, no pasa lo mismo con las demás extensiones que maneja PowerPoint. Esto por supuesto para muchas personas les puede parecer algo a lo que no haya que prestar mucha atención porque quizás ni lo utilicen pero para el usuario en cuestión y para una gran cantidad de personas que hacen uso de estas características puede llegar a convertirse en algo muy importante porque no hay razón (Aparente por lo menos) para que no siga comportándose igual.

La causa

En este tipo de casos, cuando no es un error que uno pueda investigar pero que tiene un punto de comparación, resulta mejor tratar de entender cómo se comporta Windows cuando cuando no hay nada “extraño”. Para el caso, tenía que entender qué es lo que estaba ocurriendo cuando se quería visualizar los Detalles de la presentación en las Propiedades del archivo con formato de Office 2007 y 2010, es decir con extensión (.ppsx) que era cuando presentaba todos los campos correctamente.

Después de esto, como comenté antes, debía revisar este mismo proceso abriendo el archivo con extensión (.pps) que corresponde a Office 97 y 2003 y ver cuál era la diferencia para intentar llegar a la causa.

Para intentar entender esto por supuesto, no hay otra herramienta que nos pueda ayudar mejor que la que se debe utilizar cuando todo lo demás está perdido, Process Monitor de Sysinternals.

Lo que hice fue correr Process Monitor sin aplicar ningun filtro puesto que no sabía qué proceso sería el correcto a seguir (el de PowerPoint o Explorer); después abrí las Propiedades del archivo con el formato (.ppsx) de Office 2007 y 2010 haciendo clic derecho sobre el mismo, Propiedades y pestaña Detalles. Por último abrí nuevamente Process Monitor y terminé el monitoreo con CTRL + E o bien en el menú File, Capture Events…

Como tampoco sabía por dónde empezar a buscar (Casi siempre es así), resulta una buena práctica iniciar desde abajo hacia arriba que es donde muestra los últimos eventos y que realmente son los importantes, sin embargo también me ha resultado muy útil hacer en primera búsquedas que contengan palabras relacionadas con el problema.

En este caso como estaba accediendo a los Detalles y observando los campos que más interesaban como el título, lo que hice fue abrir el cuadro de búsqueda de Process Monitor presionando CTRL + F (También se puede en el menú Edit, opción Find), a continuación le indiqué el parámetro de búsqueda que fue “Title” (Es conveniente poner los nombres en Inglés) e indicándole que la dirección fuera hacia arriba seleccionando “Up” debajo de “Direction” y finalmente clic en el botón Find Next:

PPS4

El resultado fue bastante satisfactorio, pues Process Monitor me arrojó una serie de eventos en donde estaba la clave de lo que buscaba:

PPS3

Lo que hice fue tratar de entender lo que ocurría en esta serie de eventos de arriba hacia abajo para determinar la causa, a continuación lo detallo un poco algunos de los resultados más importantes:

Internamente, Windows o cualquier aplicación desarrollada que utilice su API para trabajar con el Registro utiliza una serie de Funciones predefinidas para hacer sus operaciones; es primordial que siempre que se abra el Registro, igualmente se cierre para finalizar el proceso que se acabó de hacer.

En este caso, Windows está utilizando la función RegOpenKey para abrir la clave asociada a la extensión .ppsx de Office 2007 y 2010 (HKCR\SystemFileAssociations\.ppsx), como resultado fue SUCCESS (Exitoso), utiliza la función RegQueryKey para poder consultar las respectivas claves (Ver el primer y segundo evento de la captura), como también entrega resultado de SUCCESS (Exitoso) indica que la clave principal está creada pero además puede hacer uso de sus subclaves que también se encuentran.

Debemos notar que todo esto lo está haciendo bajo la rama de Registro de HKCR (HKEY_CLASSES_ROOT) que es donde Windows consulta para la asociación de todo tipo de archivos y extensiones globalmente. Normalmente además siempre tiene mayor prioridad lo que esté en HKEY_CURRENT_USER (HKCU) que es por usuario pero para este caso al intentar abrir la respectiva clave (HKCU\Software\Classes\SystemFileAssociations\.ppsx) el resultado fue NAME NOT FOUND que indica que la clave no está creada o no se encuentra, volvió a consultar en la que estaba en HKCR para proceder a las operaciones posteriores.

Ahora, después de saber que debía utilizar las claves bajo la rama de HKCR, vemos que Windows utilizó la función de RegQueryValue para hacer la consulta de un Valor de Registro, específicamente el de FullDetails con un resultado de SUCCESS (HKCR\SystemFileAssociations\.ppsx\FullDetails).

Aquí es donde me paré a observar qué tenía este Valor que es el que había consultado, sobre todo por el nombre que hacía referencia a todos los Detalles, para esto hice clic derecho sobre la clave y seleccioné Jump To para que Process Monitor me llevara directamente al valor en el Registro de Windows:

PPS5

Al entrar a editar el Valor que era una Cadena, me encontré con otro resultado bastante satisfactorio:

PPS6

Básicamente estaba haciendo llamado a unas especies de clases que contenían sus propios métodos: System.PropGroup.Description que me mostraba el nodo de Descripción en la pestaña Detalles dentro de las Propiedades del archivo, System.Title y System.Subject entre otros que me mostraban todos los campos que normalmente podía ver y editar.

*Nota: Para comprobarlo, se puede quitar alguno de estos y al abrir nuevamente las Propiedades del archivo .ppsx ya no se visualizará el que se haya removido del valor de registro.

En resumen entonces, había podido descubrir y aprender que al abrir las Propiedades del archivo .ppsx Windows abría la clave HKEY_CLASSES_ROOT\SystemFileAssociations y utilizaba el valor de FullDetails para mostrar todos los campos correspondientes en las propiedades dentro la pestaña de Detalles.

Con esto ya tenía una base de cómo funcionaba con el formato de Office 2007 y 2010, lo que quedaba era revisar cuál era el comportamiento con el formato para Office 97 y 2003 (.pps).

Lo que hice entonces fue guardar el log actual del Process Monitor para comparar, limpiarlo presionando las teclas CTRL + X, activar otra vez el monitoreo preisonando CTRL + E y reproduciendo el “problema” que era ir a las propiedades, pestaña Detalles pero del archivo con formato (.pps) que era el que no mostraba todo.

Volví nuevamente al Process Monitor, detuve el monitoreo y ¡Empecé a buscar!

Desafortunadamente, en este no era tan sencillo buscar porque por ejemplo el campo Título no aparecía por lo que el log me arrojaría que no encontraba resultados con esto, afortunadamente teniendo en cuenta el anterior log que había capturado busqué por el mismo valor que representaba todos los detalles, es decir: FullDetails para saber qué resultados obtenía, y encontré esto:

PPS7

Básicamente, el valor de FullDetails lo estaba obteniendo de la clave HKEY_CLASSES_ROOT\* con un resultado exitoso (SUCCESS), decidí entonces ir de nuevo hasta el valor desde Process Monitor y consultar qué había en su interior:

PPS8

Si detallamos, los métodos que trae esta clave hacen referencia a los que se muestran en las propiedades del archivo como el Nombre para mostrar, el tipo de archivo, el nombre del equipo, etc.

Como la consulta no la hacía en la extensión específica de (.pps) deduje entonces que el (*) de la rama de Registro se refería a los atributos predeterminados que mostraba para todos los archivos en su pestaña de Detalles por lo que si nuestro archivo lo estaba tomando de aquí se refería a que no existía en los Valores de su extensión.

Ya creía saber porque no aparecían todos los detalles al igual que en el formato de 2007 y 2010, lo que no sabía era por qué razón no se comportaba igual que en el equivalente en su extensión superior, por lo que seguí buscando y finalmente encontré lo que estaba buscando:

PPS9

Como ven, en esta traza me mostraba que también estaba intentando abrir la clave de HKCR\SystemFileAssociations\.pps pero el resultado era NAME NOT FOUND lo que indicaba que la clave no existía, si no existía tampoco iba a poder consultar el Valor de FullDetails por lo que obviamente no se mostraría todo en la pestaña Detalles de las Propiedades del archivo en cuestión así que tendría que buscar en otra clave diferente.

*Nota: Recordemos que HKCR son las siglas abreviadas que utiliza Process Monitor para referirse a la rama de registro de HKEY_CLASSES_ROOT, así mismo con las demás ramas.

Pensé que si Windows consultaba la clave, podría crearse y lograr emular el mismo comportamiento que con los archivos con formato de Office 2007 y 2010.

Como no sabía qué valores y claves debía tener, exporté la clave de la extensión (.ppsx) desde el Registro de Windows y posteriormente modifiqué la extensión de .ppsx a .pps para que cuando se volvier a importar creara esta clave tal cual estaba la de (.ppsx):

image

Al ejecutar la clave de Registro y asegurarme de que quedara creada, volví a abrir las Propiedades del archivo (.pps) en la pestaña Detalles vi que aparentemente había funcionado ya que podía ver todo lo que faltaba:

PPS10

En un primer vistazo, pensé que el problema se podría dar por solucionado con esta clave de registro creada, para mi mala fortuna, a parte de que no mostraba lo que contenían los atributos, tampoco dejaba editarlos, es decir, sólo podía visualizar los nombres de todos los campos que se deberían poder modificar más no lo podía hacer. El problema continuaba aunque ya tenía un primer avance y era que definitivamente debía existir esta clave para que se pudieran visualizar los detalles completos, ahora tenía que encontrar cómo los podría ver y modificar.

El haber creado y probado esta clave me aseguraba de que la característica de edición no se encontraba aquí por lo que tuve que volver a Process Monitor y ver qué más había en común en las llamadas que se hacían.

Investigando un poco más en la traza para ambas extensiones encontré otra llamada que se completaba a una clave de registro cerca de los eventos ya mencionados:

En el archivo con extensión (.ppsx) de Office 2007 y 2010:

PPS11

En el archivo con extensión (.pps) con compabilitdad para Office 97 y 2003:

PPS12

Ambos estaban utilizando la clave de su extensión ubicada en la raíz de la rama de HKEY_CLASSES_ROOT, como el resultado era SUCCESS (Exitoso) me indicaba que de “algo” estaban haciendo uso, para saber de qué, abrí las dos claves de registro, las exporté a un archivo .REG y pude comparar un poco las diferencias (A parte de su extensión como tal puesto que esta vez si existían en el Registro):

Archivo de Registro para la extensión (.ppsx):

image

Archivo de Registro para la extensión (.pps):

image

Como ven, a parte de la extensión y del número para el SlideShow que le correspondía a cada uno (12 para Office 2010 y 8 para Office 2003) las diferencias eran menores pero al parecer bastante notorias puesto que la extensión (.ppsx) tenía algunos valores y Claves adicionales en la raíz y en ShellEx que no tenía la clave de registro de la extensión (.pps).

La esperada Solución o Workaround

Algunas veces, hay que probar y arriesgarse a dañar para poder aprender o lograr salir de este tipo de inconvenientes, decidí modificar la clave de la extensión (.pps) para que tuviera el mismo comportamiento que la que funcionaba (Extensión .ppsx), para esto agregué entonces las claves y valores que le hacían falta para que quedara idéntica.

A continuación entonces, detallo el proceso detallado para dejar el comportamiento de los formatos (.pps) iguales a los de los formatos (.ppsx) y que se puedan ver y editar los Detalles en las propiedades:

*Nota: Antes que nada, aconsejo hacer respaldo de las claves de registro que se vayan a modificar para tener cómo volverlas a su estado original por si hay problemas, además en primera hacerlo en un ambiente controlado.

1. Creamos la Clave de registro para que los detalles aparezcan completos en el formato de (.pps), para esto descargamos el siguiente fichero de registro, se debe descomprimir e importar asegurándonos que finalice correctamente:

*Descargar el archivo CreatePPSAssociation

2. A continuación modificamos la clave de Registro ubicada en la raíz de la rama de HKEY_CLASSES_ROOT\.pps, para asemejarlo al de la extensión (.ppsx) ubicada en HKEY_CLASSES_ROOT\.ppsx. Les dejo también la descarga del Fichero de registro que se debe descomprimir y ejecutar, luego asegurarse de que haya importado correctamente:

*Descargar el archivo ppsModificado

3. Reiniciamos o Cerramos sesión en el sistema para que los cambios efectuados en ShellEx se puedan visualizar y se puedan editar los campos en la pestaña de Detalles.

*Nota: Si no se reinicia o se cierra sesión, seguiremos viendo los detalles faltantes pero no se podrán modificar todavía, es primordial que se haga el tercer punto.

4. Accedemos a las propiedades del archivo con formato (.pps), pestaña Detalles y veremos que ya se comporta tal cual lo hace con los formatos posteriores (.ppsx), es decir, ya se puede ver todo bien y finalmente editar:

PPS13

Espero que si hay alguien que desee que se le comporte así le ayude este artículo, para las demás el mensaje que quiero dar es que veamos todo lo que se puede aprender con un problema que parece no tener mucha importancia y cuánta ayuda nos brinda el fantástico Process Monitor.

*Nota final: Ignoro si el comportamiento es normal por temas de compatibilidad o seguridad pero es algo que en cuanto pueda, trataré de investigar ya que mis pocos conocimientos hasta ahora no me dan para entenderlo.

¡Cualquier comentario o corrección es bienvenido!

Saludos,

Checho

Posted: 7/7/2011 14:28 por Checho | con 2 comment(s)
Comparte este post:

Comentarios

preguntoncojonero ha opinado:

bravísimo !!! salu2grz

# July 8, 2011 9:02 AM

Checho ha opinado:

¡Muchas gracias por comentar!

# July 8, 2011 4:15 PM