para files windows xml file-extension file-association

windows - files - file go para pc



¿Cómo asociar una aplicación de Windows con un tipo de archivo en particular, pero compartir esa asociación con otras aplicaciones? (3)

Si creo una aplicación nueva y me asocio con, digamos, la extensión de archivo .xml en una computadora en particular, cuando alguien haga doble clic en el archivo .xml, lanzará mi aplicación y pasará el archivo como parámetro. Pero Windows parece saber qué otros archivos tienen la capacidad de trabajar con ese tipo de archivo. ¿Cómo se configura eso?

Además, cuando guardo un archivo de Microsoft Word como un archivo .xml, luego hago doble clic en el archivo, se iniciará Microsoft Word, aunque el tipo de archivo .xml esté asociado a otra cosa, como Internet Explorer. Parece que puede haber un código auxiliar asociado con el tipo de archivo .xml que cuando se invoca mira el contenido e inicia la aplicación correspondiente.

¿Existe una API de Windows, o algún tipo de forma estándar de hacerlo?

Lo que quería crear una aplicación para hacer exactamente lo que Word está haciendo, es decir, guardar el archivo en formato .xml, pero cuando se hace doble clic, se inicia la aplicación mi en lugar de Internet Explorer.


Mecanismo de apertura de documentos Office .xml.

Para documentos de Word guardados en XML y con extensiones .xml, Microsoft implementó un controlador especial para abrir estos archivos en la aplicación correspondiente (este mecanismo no solo se usa para documentos de Word, sino también para hojas de cálculo Excel, formularios de InfoPath y algunos otros formatos).

Si verifica el Registro, verá que el tipo de archivo para archivos con una extensión .xml está configurado en xmlfile :

HKEY_CLASSES_ROOT/.xml (Default) = "xmlfile"

El comando que se ejecuta cuando se abre este tipo de archivo se especifica en

HKEY_CLASSES_ROOT/xmlfile/shell/open/command = ""C:/Program Files/Common Files/Microsoft Shared/OFFICE12/MSOXMLED.EXE" /verb open "%1""

Entonces, cuando se hace doble clic en un archivo XML en el Explorador, Windows iniciará MSOXMLED.EXE. Esta aplicación ahora está buscando dentro del archivo XML y busca una instrucción de procesamiento XML. Esta instrucción de procesamiento llamada mso-application puede especificar un ProgId:

<?mso-application progid="Word.Document"?>

Si se encuentra esta instrucción de procesamiento y el ProgId es uno de los valores admitidos, MSOXMLED.EXE busca en el Registro el comando de apertura especificado para ese ProgId. Para Word.Document, en realidad hay otra redirección a Word.Document12 (si Office 2007 está instalado) usando la subclave CurVer de Word.Document, por lo que terminamos con:

HKEY_CLASSES_ROOT/Word.Document.12/shell/Open/command = ""C:/Program Files/Microsoft Office/Office12/WINWORD.EXE" /n /dde"

Finalmente, MSOXMLED.EXE iniciará la aplicación de Office apropiada o lanzará la aplicación XML predeterminada que se especifica en

HKEY_CLASSES_ROOT/XEV.GenericApp/shell/open/command

Realmente puedes probar esto llamando a MSOXMLED.EXE desde la línea de comandos:

MSOXMLED.EXE /verb OPEN "SampleWordMLDocument.xml"

Si desea implementar el mismo comportamiento, tendría que implementar un controlador como MSOXMLED.EXE que busca en el archivo una instrucción de procesamiento predefinida y luego dirige el documento a la aplicación correspondiente.

Manejo de iconos

Más arriba vimos cómo se maneja la edición y edición de documentos. Otro mecanismo es responsable de mostrar un ícono específico dependiendo de la instrucción de procesamiento dentro del documento XML: un manejador de íconos .

Los controladores de iconos son un tipo de extensiones de Shell del Explorador que son objetos COM en proceso que pueden asociarse con ciertos tipos de archivos. El que se usa para los archivos XML se especifica en el Registro bajo

HKEY_CLASSES_ROOT/xmlfile/ShellEx/IconHandler = "{AB968F1E-E20B-403A-9EB8-72EB0EB6797E}"

Este GUID se refiere al MSOXEV.dll que, de manera similar a MSOXMLEX.EXE, inspeccionará el archivo XML para el ProgId y luego proporcionará el icono correcto.

Como todo esto es un mecanismo bastante complicado, debe considerar cuidadosamente si quiere ir por este camino. En mi opinión, es mucho más sencillo registrar una nueva extensión de archivo única. También está limitado, ya que solo funcionará con tipos de archivos que le permitan incluir cierta información personalizada (como el ProgId) en el encabezado del archivo.

Microsoft ya no usa este método y usa las extensiones de archivo para sus nuevos formatos OpenXML (ver ¿Por qué los archivos ".xml" de Office se comportan de manera diferente a otros archivos ".xml"? ).


Bueno, todas las asociaciones de archivos se almacenan en el registro. Hay un artículo, "Cómo entender las asociaciones de archivos de MS Windows " que puede ayudar.

Más allá de eso, hay muchas formas de crear asociaciones de archivos mediante programación. Aunque la mayoría de las veces esto se hace en el instalador. Por ejemplo, mi sistema de instalación favorito NSIS tiene una macro para manejar esto: http://nsis.sourceforge.net/FileAssoc

Pero luego está el desafío de configurar un programa predeterminado para abrir un determinado tipo de archivo. No sé qué idioma o sistema de instalación está planeando usar para hacer esto, pero parece que esta pregunta está respondida aquí para NSIS . Seguramente Microsoft también tiene documentación para su forma de hacer esto con Windows Installer. Pero como probablemente puedas adivinar, soy más un tipo de NSIS. ;)


En el Explorador de Windows, haga clic en Herramientas-> Opciones de carpeta-> Tipos de archivo. Al hacer clic en "Nuevo" o "Avanzado", puede crear / cambiar sus propias asociaciones de aplicaciones con varios tipos de archivos que aparecerán cuando haga clic derecho en el archivo.

EDIT: No sé si hay un código auxiliar que redirige archivos específicos. Puede consultar Mi computadora / HKEY_CLASSES_ROOT en el registro y ver qué incluye allí.