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

July 2011 - Artículos

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

[Tip]: Crear paquete de instalación de Office 2010 con Service Pack 1 integrado.

Office_h_print

El pasado 27 de Junio del presente año Microsoft liberó oficialmente el Paquete de Servicios o Service Pack 1 para la suite de Office 2010. Como todo SP (Sea en Windows u Office), incorpora una gran cantidad de actualizaciones al producto además de correcciones y cambios importantes internamente; si quieren saber cuáles son, pueden ver todo en detalle en Esta KB de Microsoft.

Esto por supuesto, representa otro reto interesante para quienes están encargados de planear y realizar el despliegue a través de la organización puesto que deben definir cuál es el mejor camino para la implementación y además mitigar y solucionar los problemas se den en el camino (¡Aprendizaje por todos lados!).

Lo primero es lograr hacer las cosas más fáciles, ya hemos visto que desde Office 2010 podemos Crear un paquete de Autorespuesta para una instalación totalmente desatendida, lo que nos brinda una forma rápida de preparar los paquetes personalizados pero, para este caso necesitamos es poder desplegar Office sin necesidad de realizar un proceso a parte para el Service Pack 1; como en Windows 7, lo mejor es crear un paquete completo que incluya la instalación tanto de Office como de su respectivo SP para que preparemos un solo procedimiento y disfrutemos el resto! =)

Requerimientos

- Un equipo técnico donde tengamos todos los archivos de instalación de Office 2010 – Vienen en el DVD o imagen ISO que se adquiere –. Si todavía no tienen Office 2010, pueden descargar un Trial de Professional Plus desde Aquí.

- El Service Pack 1 para Office 2010, lo pueden descargar desde aquí:

Para Office 2010 64 Bits: http://www.microsoft.com/download/en/details.aspx?id=26617

Para Office 2010 32 Bits: http://www.microsoft.com/download/en/details.aspx?id=26622

- Opcional: Si queremos crear al final la imagen .ISO, debemos tener instalado el WAIK para Windows 7 en el equipo técnico donde se realice el procedimiento. Lo pueden descargar desde Aquí.

Integrando Office 2010 Service Pack 1

Una vez tengamos los paquetes de instalación tanto de Office como de su Service Pack, los ubicamos en un directorio cualquiera como en el Escritorio, ahora creamos una carpeta donde debemos copiar todos los archivos de instalación de Office 2010, para este artículo yo la llamé OSP10:

image

Los archivos de instalación de Office contienen una carpeta que la conocimos en el artículo del Paquete de autorespuesta llamada Updates.

Durante la instalación de Office, el asistente de instalación busca todas las actualizaciones .MSU ó MSP incluidas en esta carpeta y las inyecta o las utiliza – Para el caso del paquete desatendido-. Para el Service Pack no es la excepción y lo que haremos será extraer todo el contenido dentro de esta carpeta Updates para que al momento de instalar Office, lo haga con su Service Pack 1 integrado.

Al descargar el Service Pack, normalmente tiene un nombre similar a officesuite2010sp1-kb2460049-<Arquitectura>-fullfile-<Idioma>.exe donde <Arquitectura> se refiere a x64 ó x86 e <Idioma> se refiere al estándar internacional, por ejemplo es-ES.

image
Hacemos clic derecho sobre el Ejecutable, seleccionamos Cambiar nombre y le ponemos uno corto, por ejemplo: sp1.exe

*Nota: El nombre realmente no importa, pero se hace más sencillo a la hora de referenciarlo por lo que puede tener cualquiera que sea fácil de recordar o digitar para ustedes.

Lo siguiente será extraer su contenido en la carpeta Updates de los archivos de instalación de Office utilizando la Consola de comandos con privilegios elevados, para esto hacemos clic en Inicio, digitamos CMD, sobre el resultado hacemos clic derecho y “Ejecutar como administrador”:

image

En la consola de comandos, navegamos hasta el directorio donde tengamos los archivos de instalación del Service Pack 1 de Office 2010 utilizando el comando cd <Ubicación>, por ejemplo, para este artículo que tengo en el Escritorio sería:

cd C:\Users\Checho\Desktop

image

*Nota: La navegación se puede hacer directorio por directorio, por ejemplo: cd C:\, cd users, cd Checho, cd Desktop.

Ahora, descomprimimos el contenido del paquete del Service Pack 1 en la carpeta Updates con el siguiente comando:

NombreEjecutable.exe /extract:<DirectorioUpdates>

Donde “NombreEjecutable.exe” es como llamamos al paquete de instalación del Service Pack (Para este artículo sp1.exe) y <DirectorioUpdates> es toda la ruta a la carpeta Updates que se encuentra dentro de la carpeta en la que copiamos todos los archivos de instalación de Office.

Por ejemplo, para este artículo sería:

sp1.exe /extract:C:\Users\Checho\Desktop\OSP10\Updates

image

*Importante:

Cuando ejecuten el comando aparecerá la ventana donde se deben Aceptar los términos de licencia para la instalación del Service Pack 1 de Office 2010, seleccionamos “Clic aquí para aceptar los términos de licencia de Software Microsoft” y posteriormente clic en el botón Continuar para empezar la extracción:

image

image

Una vez terminado, la carpeta Updates dentro de los archivos de Instalación de Office tendrá todos los componentes necesarios para integrar el Service Pack 1 durante la face de despliegue:

image

¡Todo listo! Ahora sólo debemos iniciar la instalación desde el Setup.exe ubicado en la carpeta raíz de los archivos de instalación de Office, integrarlo a MDT (Si estamos realizando además un despliegue con Windows) o bien crear una imagen ISO para transportarlo nuevamente en un CD o DVD.

*Nota: El proceso de instalación puede demorar unos minutos más que cuando se instala el Office normalmente puesto que también realiza el proceso de integración para el Service Pack 1. Por lo tanto, es normal que así la barra de instalación se haya completado, el asistente no termine hasta después de un momento después.

Si desean confirmar que sigue trabajando, pueden utilizar Process Explorer de Sysinternals y ver un poco de actividad que se activa con la cuenta de TrustedInstaller (Que actúa como servicio y que se utiliza para instalación de actualizaciones) y del proceso de msiexec.exe de Windows Installer y que en el momento puede generar el mayor consumo de CPU:

image


Opcional: Creando imagen ISO para instalación manual

En el Equipo técnico donde se haya integrado el Service Pack 1 y que está instalado el AIK, ejecutamos el Deployment Tools Command Prompt haciendo clic en Inicio, Todos los programas, Microsoft Windows AIK, clic derecho en Deployment Tools Command Prompt y “Ejecutar como Administrador”.

En la Consola de comandos ejecutamos lo siguiente para genera la imagen ISO con la carpeta que contiene los archivos de instalación de Office:

oscdimg –n -m <DirectorioOffice> <DirectorioISO>\NombreISO.iso

Donde <DirectorioOffice> es la ubicación de la carpeta que tiene todos los archivos de instalación (Para este artículo: OSP10), <DirectorioISO> es donde queremos guardar la imagen .ISO que generaremos y NombreISO.iso es como llamaremos a la imagen a generar.

Por ejemplo, para este artículo sería:

oscdimg –n -m C:\Users\Checho\Desktop\OSP10 D:\Office_2010_With_SP1.iso

image

*Nota: El proceso puede tardar algunos minutos o no dependiendo de qué le hayamos integrado en las actualizaciones, recordemos que también se puede poner el paquete desatendido y cualquier otra actualización de Microsoft deseada.


Una vez instalado el Office en el equipo (o equipos) de referencia, reiniciamos el equipo (Si no lo pide que puede ser muy normal), luego podemos ir al botón de Archivo, tab de Ayuda en cualquiera de todas las herramientas y podemos ver debajo de Acerca de <Herramienta> el número correspondiente a la versión con SP1 (14.0.6023.1000):

image

Además de esto, en la Lista de Actualizaciones de Windows, se podrá visualizar el Service Pack 1 para Microsoft Office 2010 instalado:

image

Espero que les sirva y como siempre ¡Comentarios bienvenidos!

Saludos,

Checho