Cómo funcionan las asociaciones

Cómo funcionan las asociaciones

Tengo un problema con las asociaciones de archivos. Mi aplicación C# puede configurar la asociación de archivos para su propia extensión, de modo que los usuarios que hagan doble clic en el archivo de proyecto que utiliza abrirán mi aplicación y cargarán el archivo.

Esto causa problemas con dos componentes de terceros. Licencia de cada uso.

Al utilizar el doble clic, aparecen los cuadros de diálogo de licencia para ambos componentes. Al ejecutar la aplicación desde el ejecutable esto no sucede. Si arrastro el archivo apropiado al acceso directo de mi aplicación, la aplicación se inicia con el archivo y no aparece ningún cuadro de diálogo de licencia.

Por lo tanto, debo concluir que el problema está en la forma en que Windows ejecuta la acción de asociación de archivos.

Las personas que crean el código de licencia me dijeron que es probable que el problema sea que se cambió el nombre del ejecutable y el código de licencia lo rechaza. Sólo puedo suponer que esto se relaciona con el argumento que contiene el nombre del archivo.

Intenté detectar la ejecución del código a través de puntos de interrupción en mi código, pero no puedo lograr que suceda incluso si el punto de interrupción está en la primera línea que se ejecuta. Cualquier cosa que esté haciendo Windows supera ese punto.

Respuesta1

Cómo funcionan las asociaciones

Cuando hace doble clic en un archivo en el explorador de Windows, el shell de Windows busca la extensión del archivo en el registro para ver si está registrada. Si la extensión no está registrada, Windows muestra el cuadro de diálogo Abrir con, lo que permite al usuario elegir una aplicación para asociar con el tipo de archivo. Si la extensión está registrada, Windows llama a la función ShellExecute() con el comando "abrir". También pasa el nombre del archivo en el que se hizo doble clic como parámetro de línea de comando.

Sin embargo, las asociaciones van más allá de simplemente abrir un archivo. Si hace clic derecho en un archivo de texto (.TXT) en el Explorador, verá dos elementos en la parte superior del menú contextual. El primero se llama Abierto. Elegir este elemento del menú es lo mismo que hacer doble clic en el archivo en el Explorador. Cuando elige Abrir, NOTAPAD.EXE se iniciará con el archivo seleccionado cargado (asumiendo una instalación predeterminada de Windows). El segundo elemento del menú se llama Imprimir. Al hacer clic en este elemento del menú, el archivo se imprimirá sin mostrar el Bloc de notas.

Otros tipos de archivos muestran aún más elementos en el menú contextual del Explorador. Si hace clic derecho en un archivo de Microsoft PowerPoint, por ejemplo, verá elementos del menú contextual llamados Abrir, Nuevo, Imprimir y Mostrar. Los elementos que se muestran en el menú contextual para un tipo de archivo particular se obtienen del registro.

Hay al menos dos formas de crear una asociación de archivos en Windows. Una forma es hacer clic derecho en un archivo en el Explorador de Windows y elegir Abrir con… en el menú contextual. Cuando lo haga, Windows mostrará el cuadro de diálogo Abrir con. Naturalmente, este método requiere la intervención del usuario. Cuando implemente su aplicación, probablemente no desee obligar a sus usuarios a configurar una asociación de archivos manualmente.

Una mejor manera de crear una asociación es realizando varias entradas de registro desde su aplicación. Un buen programa de instalación realizará las entradas del registro por usted, pero hay ocasiones en las que necesita más control sobre el proceso.

Registrar una asociación

El registro de una asociación de archivos requiere la creación de dos claves de registro independientes. Ambas claves se crean en la HKEY_CLASSES_ROOTsección del registro.

La clave de extensión del archivo

La primera clave es el nombre de la extensión del archivo, precedido por un punto.

HKEY_CLASSES_ROOT\.zzy

En una aplicación de producción, debe verificar el registro para asegurarse de que no exista una clave antes de intentar crear una nueva clave. Si la clave ya existe, su aplicación deberá solicitar al usuario que reemplace la asociación del archivo o estar preparada para usar una extensión de archivo completamente diferente.

El valor de esta clave está vinculado a la segunda clave que creará. De hecho, es el nombre de la segunda clave. Para el programa de ejemplo, le di a esta clave el valor "Probar archivo de aplicación". Este valor puede ser cualquier valor que elija, pero, al igual que con la primera clave, debe asegurarse de que la clave no exista ya en el registro.

La clave de asociación de la aplicación.

La segunda clave tiene el mismo nombre que el valor predeterminado de la primera clave.

HKEY_CLASSES_ROOT\Test App File

Esta clave debe tener al menos una subclave. Windows usa esta subclave cuando ejecuta la aplicación. La clave completa está estructurada de la siguiente manera:

HKEY_CLASSES_ROOT
  Test App File
    shell
      open
        command

La cadena proporcionada a la tecla de comando es la ruta completa y el nombre del archivo de la aplicación seguido de%1. Por ejemplo:

C:\MyApp\MyApp.exe %1

Cuando Windows inicia la aplicación, reemplaza el%1símbolo con la ruta y el nombre del archivo en el que se hizo doble clic en el explorador de Windows. Este valor se pasa a su aplicación como parámetro de línea de comando.

Claves adicionales

Hay otras subclaves que puede crear bajo la clave de asociación de archivos. Una de esas claves es la DefaultIconclave. Esta clave se utiliza para especificar el icono que mostrará el shell de Windows junto a los archivos de los tipos registrados. Esta clave no es necesaria si solo tiene un tipo de archivo registrado y si ese tipo de archivo debe usar el ícono de la aplicación. Así es como el valor de la clave DefaultIcon busca una asociación que especifica el icono de aplicación predeterminado:

C:\MyApp\MyApp.exe,0

Esto especifica que el primer ícono que se encuentra en el archivo EXE de la aplicación debe usarse como ícono de visualización de la asociación de archivos. Si su aplicación tiene más de un tipo de archivo, puede especificar otros íconos cambiando el índice de íconos que sigue a la coma. Por ejemplo, C++Builder tiene iconos para un archivo de proyecto, un archivo de formulario, un archivo fuente, etc. Si observa el registro a continuación, HKEY_CLASSES_ROOT\BCBProject\DefaultIconverá que el ícono de un archivo de proyecto es el índice de ícono 4 (al menos para C++Builder 4).

Si desea permitir que los usuarios impriman un documento, puede agregar una subclave de impresión además de la subclave de apertura. El valor de la subclave de impresión es similar al de la subclave de apertura, con una excepción:

C:\MyApp\MyApp.exe /p %1

Observe que este valor tiene un modificador de línea de comando de/paginsertado entre el nombre de la aplicación y el%1símbolo. Su aplicación puede estar pendiente de la/pagcambie y tome las medidas apropiadas cuando se detecte el cambio.

Puede agregar tantas subclaves como desee para un tipo de archivo en particular. El nombre de cada subclave aparecerá en el menú contextual del Explorador. Solo necesita agregar un modificador de línea de comando para cada tipo de comando para que su aplicación pueda identificar el elemento del menú contextual que se seleccionó. Si proporciona un valor predeterminado para la subclave, Windows usará ese texto para el texto del elemento del menú contextual. Si no proporciona un valor predeterminado, Windows utilizará el nombre de la clave para el elemento del menú.

Toda la información se toma de esteartículo.

información relacionada