El mensaje de error al intentar predeterminar un programa sobre los archivos en Windows 8, Process Monitor y su solución

shutterstock_82751101_6E4CAFF4

Uno de los cambios más sutiles, pero de gran trascendencia en Windows 8, es la asociación neutral que ahora tienen los archivos; es decir, la mayoría no tiene una predeterminada como sucedía en todas las versiones anteriores. Esto ayuda a que no se den fallos en asociación errónea de los archivos (Problema muy común en Windows 7), y que el usuario la pueda asignar fácilmente cada que abra por primera vez los diferentes tipos de archivos.

La forma en que se asocian los diferentes programas a las extensiones no ha cambiado, y aunque hay incluso otras maneras de hacerlo en Windows 8 (Utilizando PowerShell, por ejemplo), las más comunes suelen ser: Ir a las propiedades del archivo haciendo clic derecho, Propiedades, y haciendo clic en el botón Cambiar, o bien haciendo clic derecho sobre el archivo, seleccionar Abrir con y darle a  “Seleccionar programa predeterminado” si los que están en la lista no nos sirven. En últimas, todas las formas resultan creando la subclave de UserChoice en el registro y el respectivo valor de ProgId para referenciar la aplicación.

El problema

En este caso, que surgió desde un hilo abierto en los Foros de Windows de Microsoft Community,  lo que sucedía es que el usuario estaba intentando realizar cambios en el Programa Predeterminado de diferentes archivos, pero al hacer clic derecho, Abrir con, y Escoger programa predeterminado, estaba obteniendo un extraño mensaje de error similar al siguiente:

image

Inglés:

“This fiel does not have a program associated with it for performing this action. Please install a program or, if one is already installed, create an association in the Default Programas control panel.”

Español:

“Este archivo no tiene ningun programa asociado para ejecutar esta acción. Por favor instale el programa o si lo tiene cree una asociación en el panel de control de Programas Predeterminados.”

No importaba con qué tipo de archivo intentara hacer el cambio, siempre obtenía el mismo mensaje de error, que sólo permitía aceptar para cerrar.

La causa

Como diferentes alternativas, que iban entre crear un nuevo usuario, hasta probar diferentes modos de abrir el archivo no funcionaban, había que recurrir a la herramienta por excelencia, es decir: Process Monitor de Sysinternals nuevamente.

Como el problema le sucedía en cualquier usuario, se podía concluir que era un evento que afectaba a toda la máquina, y no estaba asociado a una cuenta, por lo que todo lo relacionado a HKEY_CURRENT_USER (HKCU) se podía obviar, y además se manejaba desde el proceso de Explorer.exe, pues no estaba ligado tampoco a una extensión. Esto permitía hacer un filtro más preciso dentro de la traza de Process Monitor, pero para saber con ciencia cierta dónde podía estar el problema, era necesario comparar el comportamiento con un equipo funcional.

Suele ser una gran técnica, pues basta básicamente con correr Process Monitor en el equipo para reproducir el problema, y en un equipo que se pueda abrir la ventana que lanza la opción de Escoger un programa predeterminado y comparar línea por línea. Claro está, existen herramientas muy buenas para esto, como Kdiff3 pero igual requiere tiempo para analizar los resultados en ambos lados.

Después de un buen par de horas, finalmente encontré algo muy interesante dentro de la Traza que me envió el usuario con el inconveniente:

Proc1

Como ven, el proceso de Explorer.exe, utilizando la operación de RegOpenKey, que hace parte de la API de Win32 para abrir claves de Registro, intentaba abrir la clave de OpenWithSetDefaultOn, ubicada en: HKEY_CLASSES_ROOTUnknownshellOpen, pero obtenía el resultado de NAME NOT FOUND; es decir, la clave no existía.

Esta operación era la importante, porque al momento de compararla con un equipo funcional, el resultado era completamente diferente:

F2

La operación no solo era exitosa (SUCCESS), sino que además hacía consultas sobre ella (RegQueryKey), mientras que en la de arriba, la cerraba al no encontrarla. Además de todo esto, HKEY_CLASSES_ROOT se encarga de administrar todas las asociaciones que Windows requiere y utiliza, o las que no están en su equivalente de HKEY_CURRENT_USER.

Efectivamente, cuando en mi máquina funcional eliminé la clave de OpenWithSetDefaultOn, pude reproducir exactamente el mismo mensaje de error, realizando la misma operación.

La solución

Afortunadamente, la solución para este tipo de problemas con asociaciones, como en casi todos los problemas que el registro está involucrado, pasan por restablecer la clave, importándola desde un equipo funcional, y de preferencia, en limpio (Esto evita que la clave o valores ya se hayan modificado, y varíen de los predeterminados).

Para este caso en cuestión, si es que alguna vez llegan aquí porque lo están enfrentando, el procedimiento sería así:

Descargar el archivo Unknown desde aquí:

Descomprimir y ejecutar el archivo Unknown.reg que des comprime. Se deben asegurar que el mensaje de importación correcta aparezca después de la ventana de advertencia por importar claves de registro:

image

Una vez hecho esto, deberían poder acceder sin problemas a la selección de programas predeterminados desde el clic derecho como siempre:

image

Espero sea de utilidad.

Saludos,

Checho

3 comentarios en “El mensaje de error al intentar predeterminar un programa sobre los archivos en Windows 8, Process Monitor y su solución”

  1. @Kiquenet, Me falta mucho para dominar en verdad Process Monitor. Aún así, como comenté, es buena práctica empezar a hacerlo, así no encuentres nada, pues te vas familiarizando. =)

    ¡Gracias por tomarte el tiempo de comentar!

Responder a kiquenet Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *