Un método más para detectar defectos en extensiones de shell

Una cosa en la que destaca Windows, y en especial su shell, es que se trata de un componente muy extensible por parte de los desarrolladores de aplicaciones. Por ejemplo, se pueden crear manejadores de propiedades para que el usuario pueda verificar el código CRC de un fichero accediendo a sus propiedades; manejadores del menú contextual que nos permitan examinar un fichero o carpeta con un antivirus, etc.

El problema de ser tan extensible es que no siempre el software que extiende el shell cumple con las guías de desarrollo que se explican en la documentación oficial (MSDN Library). Este es el caso por ejemplo de las extensiones del menú contextual, algunas de las cuales implementan incorrectamente uno de sus métodos (concretamente, el método InvokeCommand). Si instalamos una de esas extensiones en nuestro sistema, vamos a experimentar problemas de diversa índole, como por ejemplo no poder abrir Administrar equipo, no poder editar una fotografía, o problemas similares. Hace algún tiempo aporté mi granito de arena advirtiendo del problema en la correspondiente documentación del método InvokeCommand, para intentar mejorar aunque sea un poco el ecosistema de Windows.

Cuando un usuario se encuentra con un problema de este estilo, suele echarle la culpa a Windows, cuando realmente es un componente de terceros el que está causando el problema. En parte no se trata de una reacción fuera de lo normal, pues no es obvio asociar a las extensiones de shell con este tipo de problemas. Es más, aun sabiendo que la culpable es una extensión de shell, saber a ciencia cierta cuál es la culpable es un procedimiento que no es demasiado conocido.

Una alternativa es usar alguna herramienta del estilo de ShellExView (http://www.nirsoft.net/utils/shexview.html) o Autoruns (http://technet.microsoft.com/en-us/sysinternals/bb963902.aspx), las cuales muestran las extensiones del menú contextual instaladas en el equipo, y comenzar por desactivar las extensiones de terceros una a una (suponiendo quizá de manera optimista que las extensiones que desarrolla Microsoft no adolecen de ese problema). El procedimiento completo lo describo en este artículo.

FileTypeVerifier, una ayuda para detectar qué extensión es la culpable

El SDK de Windows 7 es un paquete esencial para cualquier persona que desarrolle aplicaciones para Windows, pero también incorpora ciertas utilidades que pueden resultar muy valiosas a los usuarios finales o profesionales de soporte. Por ejemplo, el SDK incorpora una pequeña herramienta en el directorio C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin denominada FileTypeVerifier.exe. Esta herramienta es de enorme ayuda a la hora de comprobar que el estado de las asociaciones y tipos de archivo de Windows es el adecuado. Nos va a servir también para detectar extensiones del menú contextual mal diseñadas, como describiré a continuación.

En primer lugar, supongamos un sistema con la aplicación CompareIt! instalada. Esta aplicación, a fecha de publicación de este artículo, implementa mal su extensión del menú contextual. Podemos comprobarlo haciendo clic con el botón derecho sobre Equipo y seleccionando Administrar (observamos que no ocurre nada). Abrimos FileTypeVerifier.exe y nos encontramos con una interfaz del tipo asistente Aero con varias opciones:

FileTypeVerifier1 La categoría que se seleccione va a influir en el tipo de tests que realizará la utilidad. La herramienta File Type Verifier está orientada a desarrolladores que quieran probar los tipos de archivo que sus aplicaciones registren en el sistema, de ahí que haya que seleccionar algún tipo de fichero nada más comenzar. Para nuestro problema basta con seleccionar la opción Document (por ejemplo).

La siguiente pantalla muestra una “diana” donde deberemos arrastrar un fichero de texto cualquiera, para que el sistema seguidamente lo analice y nos muestre los resultados:

FileTypeVerifier2 En la lista de resultados, debemos acceder al apartado Verb handler y, si se diera el caso, debemos hacer clic sobre Diagnose context menu handlers para abrir el fichero de reporte completo. Al situarnos en la posición adecuada del fichero de reporte, observamos lo siguiente:

FileTypeVerifier3

Así que ya tenemos detectado al culpable. Con el GUID de la extensión en la mano (el código hexadecimal que aparece entre llaves), podemos aplicar el método 2 de mi artículo, o bien informar al fabricante del defecto de su aplicación.

Espero que este artículo ayude a depurar problemas con las extensiones del menú contextual así como probar el registro de tipos de archivo y vistas previas de archivos usando la herramienta File Type Verifier.

4 thoughts on “Un método más para detectar defectos en extensiones de shell

  1. Me desesperan y agotan todas estas aplicaciones que instalan cosas en todos lados y toquetean los valores por defecto de Windows.

    Ojalá existiera una forma universal de solucionar este problema.

    Al menos el problema que muestras acá puede ser automáticamente comprobado si alguien implementa una utilidad.

  2. @Erwin Ried: Yo creo que es inevitable que si ofreces la posibilidad a los desarrolladores de terceros para que extiendan tu software, te encuentres con “plug-ins” de no demasiada calidad, o que no hayan sido demasiado probados. Microsoft lo más que ha podido hacer es “aislar” esos “plug-ins” para que en caso de fallo interrumpan lo menos posible al usuario.

    Hay infinidad de aplicaciones (algunas de ellas incluso de Microsoft) que no siguen las pautas de la documentación de la API pero que funcionan porque Microsoft tiene que garantizarles la compatibilidad. Y esto obviamente complica los costes en ingeniería de las futuras versiones de Windows.

  3. Sí, entiendo y asumo eso a diario.

    En efecto, incluso me molesta que Office añada “Nuevo”, “Editar”, “Imprimir” (sólo por nombrar algunas) a infinidad de tipos de archivos.

    Sé que todo va en cuestiones de compatibilidad hacia atrás, pero ya van quedando tan pocas cosas -poco elegantes- en los productos de Microsoft que es hora de que metan mano a estos detalles. Podría imaginar una especie de caja de arena para extensiones virtualizadas, en donde puedas aislar un grupo completo de extensiones que instaló cierta aplicación de forma limpia e intuitiva, por ejemplo una vista previa de los menúes afectados, etc.

    Me agradan artículos sobre detalles así, más aún sí son en nuestro idioma.

Leave a Reply to MyrdePicas Cancel reply

Your email address will not be published. Required fields are marked *