¿Cómo consigo que ftype y assoc coincidan con el Explorador de Windows?

¿Cómo consigo que ftype y assoc coincidan con el Explorador de Windows?

Cambié la asociación que se usará al iniciar un .pyarchivo, a través del Explorador de Windows:

  1. Herramientas -> Carpetas -> Tipos de archivos.
  2. Luego busque .py.
  3. Cambie la asociación a Wordpad.

Ahora, cuando escribo el nombre de un archivo py en la línea de comando, Wordpad lo abre.

Pero assocy ftypeen la línea de comando todavía devuelve lo siguiente:

C:\> assoc .py
.py = Python.File

C:\> ftype Python.File
Python.File = "C:\Program\Python27\python.exe" "%1" %*

¿Cómo es posible que la asociación esté funcionando assocy ftypeno lo sepas?

Reinicié el mensaje.


Más información de mi registro:

HKEY_CLASSES_ROOT\.py
= Python.File

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\Application
= wordpad.exe

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\OpenWithProgids\Python.File
= 

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.py\(Standard)
= Python.File

Más registro:

HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command\(Standard)
= "C:\Program\Python27\python.exe" "%1" %*`

Supongo que esto es lo que aparece en ftype Python.File. Pero no parece acostumbrarse.


(Estoy haciendo esto para realizar pruebas, para eventualmente poder elegir fácilmente mi versión predeterminada de Python).

Respuesta1

Dependiendo de cómo llames a un archivo dependerá del verbo que se utilice. El verbo que utilice determina lo que Windows hará con él. Los verbos estándar son Abrir, Editar, Imprimir, Reproducir y Vista previa. Sin embargo, es posiblecrea tus propios verbos. El verbo que se añade con más frecuencia es elAbierto En familia(incluido OpenWithProgID), que agrega ese pequeño submenú contextual en "Abrir con" para brindarle posibles alternativas. Si instala Paint.NET, por ejemplo, y luego hace clic con el botón derecho en un archivo .jpg, verá que la entrada Abrir con se expande a un submenú que enumera Paint.NET, Paint y lo que sea que Microsoft haya llamado el visor de imágenes para su versión. de Windows.

Además, lo que dijo Unsigned Code Labs es muy importante. Cuando estás depurando clases, necesitas mirar HKLM\Software\Classes\y HKCU\Software\Classes. HKCREs muy útil para consultar el sistema, pero no tan bueno para descubrir por qué se comporta mal.

Hice algunas pruebas en mi sistema Windows 7 con procmon.exe, y los comandos assocy ftypeparecen intentar escribir directamente en HKCR, y el sistema aparentemente lo interpreta como escribir en HKLM. Mi cuenta actual es miembro del grupo de administración, pero UAC está habilitado. Me negaron el acceso cuando lo intenté assoc .mytest=MyTest.File.

Curiosamente, si creo una asociación haciendo clic derecho en un archivo llamado test.mytesty asociándolo con el Bloc de notas, ni assocve ftypeesta asociación. La asociación definitivamente está ahí en HKCUy HKCR. Sin embargo, no he intentado reiniciar.

Respuesta2

No sé cómo se puede hacer coincidir el registro y lo que aparece en ftype y assoc. Para mí y, según veo, también para usted, los comandos ftype y assoc son inútiles. Lo que hago para cambiar el programa predeterminado para una extensión determinada de forma programática (frente a la forma estándar y más sencilla usando el explorador) es modificar esta clave de registro.

HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.TheExtensionYouWantToModify\UserChoice\ProgID

Por ejemplo, si quiero abrir mis mp3 con mplayer, introduzco

HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp3\UserChoice\ProgID 

el valor de "mplayerc.mp3"

¿Cuáles son las complicaciones de hacer esto? Primero necesita conocer los ProgID válidos (use ftype) y, en segundo lugar, necesita acceso de escritura a esa colmena. Windows coloca automáticamente una ACL de denegación para la clave UserChoice, por lo que necesita encontrar una manera de eliminar esa regla de denegación para obtener acceso de escritura. Yo uso el programa subinacl, que podéis descargar desde aquí.http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e8ba3e56-d8fe-4a91-93cf-ed6985e3927b&displaylang=enpara modificar los permisos. También puede utilizar el programa de terceros SetACL. Recomiendo el primero porque la sintaxis es mucho más simple.

Respuesta3

Microsoft ha cambiado el funcionamiento de Windows 8 en adelante. Ya no es posible editar el registro para cambiar esto. Acotizar microsoft:

En versiones anteriores a Win 8, las aplicaciones podían configurar el controlador predeterminado para un tipo de archivo/protocolo manipulando el registro, esto significa que fácilmente podría tener un script o una política de grupo manipulando el registro. Sin embargo, en Win 8, los cambios en el registro se verifican mediante un hash (único por usuario y aplicación) que detecta la manipulación por parte de las aplicaciones. En ausencia de un hash válido, ignoramos el valor predeterminado en el registro.

La forma en que Microsoft espera que cambie esto ahora es con un archivo xml que se implementa a través de la Política de grupo. Instruccionesaquí.

Afortunadamente, Christoph Kolbicz ha realizado ingeniería inversa al algoritmo hash y ha creado una herramienta llamadaEstablecer usuario FTApara establecer la asociación del tipo de archivo. Lamentablemente es de código cerrado.

Respuesta4

La confusión aquí es entre lo que se acostumbraabiertoun archivo y lo que se utiliza paracorrerun archivo. La clave de registro

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\Application
\.py\Application

es lo que le dice a Windows cómo abrir el archivo. Al hacer doble clic en el archivo se abrirá el archivo con esta aplicación.

Como el archivo no es un archivo ejecutable, la línea de comando supone que desea abrir el archivo con la aplicación predeterminada, como si hubiera hecho doble clic en él.

Cambiar la asociación nuevamente a C:\Program\Python27\python.exe o editar la clave de registro para que apunte a Python debería devolverlo a como solía ser, donde Windows supone que desea abrir el archivo con el programa predeterminado, que es python.exe, que luego ejecuta el programa.

información relacionada