2008-10-21 13 views
8

tengo unas pocas preguntas relacionadas:asociación con Filetype aplicación (C#)

1) ¿Es posible hacer mi cambio de programa de asociación de tipo de archivo, pero sólo cuando se está ejecutando? ¿Ves algo mal con este comportamiento?

2) La otra opción que estoy viendo es permitir que los usuarios decidan abrir con mi aplicación o restaurar la asociación predeterminada ... algo así como: "capturar todos los archivos .lala" o "restaurar la asociación .lala". ¿Cómo puedo hacer esto? ¿Cuál crees que es el mejor enfoque?

Respuesta

7

En cuanto a las asociaciones de archivos, he escrito una respuesta anterior que al menos covers the "How".

Esto también debería indicarle la dirección correcta sobre cómo gestionar la copia de seguridad y la restauración. Con el acceso directo al registro a través de C#, no será necesario usar archivos .reg, por lo que puede hacer una copia de seguridad del valor anterior como prefiera en su aplicación, y también restaurarlo desde allí.

La pregunta clave aquí es: ¿Debería cambiar las asociaciones de archivos al azar? Por lo menos, preguntar al usuario por adelantado sería obviamente necesario (como también lo indicó).

Además, los usuarios de Vista con usuarios habilitados para UAC o no privilegiados de otras versiones de Windows pueden no tener los permisos necesarios para cambiar las asociaciones de archivos globales. El procedimiento de instalación (des) de su programa puede ser el único lugar donde esto puede tener éxito.

EDITAR

Como Franci Penov indicated in his answer, hay es una manera de cambiar las asociaciones de archivos locales sobre una base por usuario, incluso para los no administradores (por eso hablé de "asociaciones globales" en el párrafo anterior) . También mencionó que no es aconsejable ir allí.

+4

El otro problema es que si su aplicación falla, dejará la extensión asociada incorrectamente. Es realmente fastidioso tener un programa que cambie la configuración de la computadora de esa manera y los deje "dañados" al bloquearse –

2

Probablemente se puede hacer, pero creo que terminaría siendo engorroso. Todas las asociaciones de tipo de archivo se almacenan en el registro, por lo que tendría que escribir/revertir las entradas del registro cada vez que se inicia y se detiene su aplicación. Además, dependiendo de la frecuencia con que lo haga, las nuevas asociaciones pueden no ser recogidas inmediatamente en el explorador de Windows.

Las asociaciones se enumeran en HKEY_CLASSES_ROOT en el registro y se pueden asignar una gran cantidad de formas (tipos de mime/progIDs/etc).

Muchas aplicaciones que he visto preguntan si desea asociar ciertos tipos de archivos con la aplicación durante el tiempo de instalación, y le dan la posibilidad de darse de baja y dejar la configuración actual.

no creo que me gustaría recomendar "sobre la marcha" asociaciones de tipos de archivos

1

1) se llega a definir los tipos de archivos que se encuentran en la lista desplegable Tipo de archivo de diálogo abierto. Fuera de eso, es posible para cambiar el tipo de archivo predeterminado en la aplicación abierta, y luego reemplazarlo durante el cierre de la aplicación, ya que la asociación del tipo de archivo es solo una configuración de registro.

En cuanto a mal, no lo haría. La primera razón es que no es el comportamiento estándar de las aplicaciones. La segunda razón es que si su aplicación o PC se cierra inesperadamente, corre el riesgo de no devolver la asociación a su configuración original.

2) Windows de forma predeterminada permite al usuario elegir estas opciones utilizando el clic derecho y el comando "abrir con".

3

Puede implementar un cambio de asociación de archivo "al vuelo" asociando un pequeño ejecutable con esa extensión de archivo que al inicio comprobará si su aplicación principal se está ejecutando y le pasará el nombre de archivo o si no la está ejecutando ' ll invocar la aplicación asociada "regular".

La principal ventaja de este enfoque es que debe revisar el registro una sola vez.

Los principales inconvenientes de este enfoque son:

  • se necesita un proceso de ayuda
  • la aplicación que "posee" estas extensiones de archivo pueden detectar el cambio y se quejan de que el usuario, lo que provocó la "reparación" por lo tanto sacándote de la imagen.

Alternativamente, podría cambiar la asociación del archivo al inicio de su programa principal. Esto funcionará incluso para usuarios que no sean administradores. mientras que las asociaciones de archivos se almacenan en HKEY_CLASSES_ROOT, hay un pequeño truco: HKCR es en realidad un mapa de HKEY_LOCAL_MACHINE\SOFTWARE\Classes y HKEY_CURRENT_USER\SOFTWARE\Classes. Por lo tanto, puede registrar temporalmente la extensión de archivo para el usuario actual en HKCU y "sombrear" la asociación original de HKLM.

Por supuesto, recomendaría este enfoque, ya que solo hace falta un bloqueo en su aplicación para hacer que la asociación sea permanente y dado que muy pocas aplicaciones saben cómo manejar asociaciones de archivos en HKCU, es probable que sea una situación irrecuperable para la aplicación original.

Cuestiones relacionadas