2011-05-31 5 views
7

He estado tratando de encontrar una forma de cambiar la asociación de archivos predeterminada para una extensión de archivo específica en Windows 7. Tengo una aplicación que se utiliza para ver los archivos .tif que deseo solicitar al usuario si no es el visor predeterminado para ese tipo de archivo . Si eligen que sea el predeterminado, quiero sobrescribir el visor predeterminado actual . Esto funciona bien si no hay otros visores instalados en el sistema . Cuando hay otro espectador que ha sido seleccionada por el usuario, que No puedo cambiar la clave de registro que controla que aquí:¿Hay alguna forma de establecer programáticamente la clave de registro "UserChoice" para hacerse cargo de una asociación de tipo de archivo?

 
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\UserChoice 

He fregado la tela tratando de encontrar a alguien que ha hecho esto, pero nadie parece tener alguna respuesta Cuando trato de actualizar el valor "Progid" dentro de esta clave , aparece el mensaje "No se puede escribir en la clave de registro" o "Se solicitó el acceso al registro solicitado no es ". El código es bastante simple:

var path = @"Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\UserChoice"; 
var key = Registry.CurrentUser.OpenSubKey(path, true); 
key.SetValue("Progid", "myprogid..."); 

¿Hay algún tipo de protección especial en esta llave que le impide ser programación editado?

+0

¿Ha intentado actualizarlo, por ejemplo en una aplicación de consola, que ejecuta con privilegios de administrador? – ChristiaanV

+0

Es una aplicación de escritorio, ejecutándose como yo, pero sin privilegios de administrador. Ese fue mi siguiente paso. – Jason

+0

Correr como administrador no ayudó. – Jason

Respuesta

0

Parece no modificable pero puede eliminar UserChoice.

1

Para poder escribir en la clave UserChoice, necesitaba tomar posesión de la clave antes de escribirla (como this código - no en C# (C++), pero supongo que se puede hacer de la misma manera).

¡Podrá escribir en la clave y su código de asociación de archivos funcionará!

EDIT: Véase también Registry Key Security and Access Rights on MSDN

0

Si no se ha dado cuenta de alguna manera de hacer esto, pruebe las herramientas assoc y ftype de línea de comandos. Sin embargo, tenga en cuenta que deberá ejecutarlos con privilegios administrativos.

  1. Cree un archivo por lotes que utiliza Assoc y Ftype para establecer la asociación de archivos.
  2. Use System.Diagnostics.Process para ejecutar la secuencia de comandos por lotes.

que básicamente tienen que crear un .bat (o .cmd) archivo con las líneas siguientes:

ASSOC .txt=TXTFileWordPad  
FTYPE TXTFileWordPad="%ProgramFiles%\Windows NT\Accessories\wordpad.exe" %%1 

Para obtener más información sobre cómo utilizar estas herramientas echar un vistazo a: Managing Files from the Command Line- Assoc and Ftype.

Cuestiones relacionadas