2010-09-01 12 views
7

Me refiero específicamente a Windows 7.Windows 7 archivo de asociación de extensión

tengo código que asocia una cierta extensión con mi solicitud según lo propuesto por webJose en la siguiente página: What registry keys are responsible for file extension association? (i Sin embargo escribo correctamente a HKEY_CURRENT_USER \ Software \ Classes en lugar de HKEY_CLASSES_ROOT como se sugiere)

Lo anterior funciona inicialmente, o si no hay otros programas asociados con la extensión. Sin embargo, después de usar Windows 7 incorporado "Elija el programa predeterminado ..." (que se encuentra debajo del menú contextual de archivo-clic derecho debajo de "Abrir con") vuelve a asociar la extensión con cualquier programa nuevo que elija.

Lo que sucede en este punto es que "HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts \\ UserChoice" es modificado por el sistema, por lo que el programa recién seleccionado se hace cargo.

Ejecutando el código anterior, para recuperar el control sobre la extensión no funcionará. La única manera de recuperar el control, es ya sea:

  1. Edición del UserChoice -> valor Progid, que no está permitido (ni programación ni mediante regedit.exe - acceso denegado).
  2. o borrar el valor de UserChoice y asegurándose de que su aplicación es la primera en el valor MRUList en \ OpenWithList (esto se puede lograr mediante regedit.exe pero no mediante programación)

Mi pregunta es: ¿Hay alguna manera para lograr esto programáticamente? ¿Qué valores de registro se pueden cambiar para recuperar el control de una extensión, después de que se asocie con otro programa?

Sé que podría parecer obvio que si un usuario a través del explorador establece la aplicación asociada a una extensión, se esperaría que lo haga de la misma manera para volver a asociar la extensión a una aplicación diferente.

El problema, sin embargo, es que tengo un botón en mi aplicación que usa el código mencionado anteriormente para verificar la asociación de extensiones con mi aplicación. Lamentablemente con la situación anterior, mi aplicación muestra un mensaje que confirma que la extensión ya está asociada correctamente cuando no es así. Entonces, ¿hay una forma de evitar esto?

Respuesta

4

Eliminando UserChoice debe revertir el programa predeterminado a las claves de asociación de archivos estándar (que comienza con ProgID en HKCU). Salvo que también podría eliminar OpenWithList, que se revertiría con extremo perjuicio.

Editar: Salida Registry Key Security and Access Rights en MSDN, en particular la función RegSetKeySecurity. Recuerde que deberá otorgarse control administrativo a la clave antes de poder eliminarla.

+0

No se puede eliminar la clave de ninguna manera mediante programación, incluso con grabaciones de administrador. ¿Cuál es el motivo de mi pregunta anterior, cómo puedo eliminarla? – Tamer

+0

Esa es una peculiaridad de su sistema, no un estándar de Windows. Algún software que ha instalado ha cambiado el acl de la clave para evitar que la cambie ... probablemente lo que se haya registrado en UserChoice. Sin embargo, debe poder acceder y luego eliminarlo. –

+0

¿Puedes confirmar esto? Ahora lo he probado en varias máquinas que ejecutan la aplicación como administrador. El acceso a esa clave específica "UserChoice" se niega mediante programación (ni escribir ni eliminar). ¿Estás diciendo que puedes editar programáticamente los valores de esta clave en tu máquina? ¿Puede alguien por favor confirmar esto? – Tamer

2

Bien relacionado con la asociación de archivos en la Ventana 7, se ha planteado un nuevo 'problema'.

Es uno de esto: Tienes que luchar por tus derechos.

Suponiendo te gusta correr

REG.exe DELETE "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mov\UserChoice" /f /va 

obtendrá acceso DENYED. Cuando comprueba la configuración de seguridad de la clave en Regedit 'UserChoice', verá que hay una ventana de configuración creada para usted, para denegar 'set' para el usuario actual. Bueno, puede cambiar/eliminar esta configuración en regedit y ahora puede eliminar UserChoice. Sin embargo, para los programadores/programadores esa configuración es un poco perniciosa, ya que ahora hay herramientas reales para configurar las ACL en el registro. Sin embargo aquí alguna solución que permite al eliminar las claves con ACCESO DENYED (obras, por supuesto, esto sólo en caso que usted tiene el derecho de cambiar los permisos):

ResetMovAssoc.cmd

::create 'empty.hiv' 
REG ADD "HKCU\emptyKey" /f 
REG SAVE "HKCU\emptyKey" empty.hiv /y 
@REG DELETE "HKCU\emptyKey" /f >nul 
::^-note you can add @[...] >nul to the other entries as well to run them quite 

:: Delete Reg key by replacing it with an empty hiv 
REG RESTORE "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mov" empty.hiv 
del empty.hiv 

Para resumir esta la Lo más importante aquí es REG RESTORE + Archivo de la columna del registro que contiene la clave justa y vacía. En Regedit equivalente a Importar con solo un archivo de estructura de registro vacío (Nota: es un archivo de sección y no un archivo * .reg).