Cambié la asociación para usar al iniciar un .py
archivo, a través del Explorador de Windows:
- Herramientas -> Carpetas -> Tipos de archivo.
- Luego navega hasta
.py
. - Cambia la asociación a Wordpad.
Ahora, cuando escribo el nombre de un archivo py en la línea de comando, Wordpad lo abre.
Pero assoc
y ftype
en la línea de comando aún devuelve lo siguiente:
C:\> assoc .py
.py = Python.File
C:\> ftype Python.File
Python.File = "C:\Program\Python27\python.exe" "%1" %*
¿Cómo es que la asociación está trabajando, pero assoc
y ftype
no son conscientes de ello?
Reinicié el aviso.
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 está apareciendo ftype Python.File
. Pero no parece acostumbrarse.
(Estoy haciendo esto para probar, por lo que eventualmente puedo elegir mi versión predeterminada de Python fácilmente).
windows-xp
file-association
Gauthier
fuente
fuente
Respuestas:
Dependiendo de cómo llame a un archivo dependerá de qué verbo se use. El verbo que usa determina lo que Windows hará con él. Los verbos estándar son Abrir, Editar, Imprimir, Reproducir y Vista previa. Sin embargo, es posible crear tus propios verbos . El verbo más comúnmente agregado es la familia Abrir con (incluyendo OpenWithProgIDs), que agrega ese pequeño submenú de contexto en "Abrir con" para ofrecerle 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 Microsoft llamó 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, debes mirar
HKLM\Software\Classes\
yHKCU\Software\Classes
.HKCR
es muy útil para consultar el sistema, pero no es tan bueno para descubrir por qué se está comportando mal.Hice una pequeña prueba en mi sistema Windows 7 con
procmon.exe
, y parece que los comandosassoc
yftype
tratan de escribir directamenteHKCR
, y el sistema aparentemente interpreta eso como escribir enHKLM
. Mi cuenta actual es miembro del grupo de administración, pero UAC está habilitado. Obtuve acceso denegado cuando lo intentéassoc .mytest=MyTest.File
.Curiosamente, si creo una asociación haciendo clic derecho en un archivo llamado
test.mytest
y asociándolo con el Bloc de notas,assoc
niftype
veré esta asociación. La asociación definitivamente está ahí enHKCU
yHKCR
. Sin embargo, no he intentado reiniciar.fuente
No sé cómo puedes hacer la coincidencia entre el registro y lo que aparece en ftype y assoc. Para mí y como te veo también, el comando ftype y assoc son inútiles. Lo que hago para cambiar el programa predeterminado para una extensión dada de forma programática (frente a la forma estándar y más simple de usar el explorador) es modificar esta clave de registro
Por ejemplo, si quiero abrir mis mp3 con mplayer pongo
el valor de "mplayerc.mp3"
¿Cuál es la complicación de hacer esto? Primero, necesita conocer los ProgID válidos (use ftype), y segundo, necesita acceso de escritura a esa colmena. Windows coloca automáticamente una ACL de denegación para la clave UserChoice, por lo que debe encontrar una manera de eliminar esa regla de denegación para obtener el acceso de escritura. Utilizo el programa subinacl, que puedes descargar desde aquí http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e8ba3e56-d8fe-4a91-93cf-ed6985e3927b&displaylang=en para modificar los permisos. También puede usar el programa de terceros SetACL. Recomiendo el primero porque la sintaxis es mucho más simple.
fuente
Explorer (el shell de Windows) siempre da preferencia a la aplicación especificada en la clave del proveedor que se especifica bajo el valor predeterminado de la extensión. (En su caso,
.py
es la extensión,Python.File
es la clave del proveedor).ftype
yassoc
puedo leer sus valores de otras áreas, no estoy seguro. Así es como lo hace Explorer.EDITAR: Esta página puede ser de su interés: MSDN - Tipos de archivos
Especialmente esto:
Quizás aquí es donde las diferentes partes de Windows entran en conflicto, si hay una asociación "predeterminada" en HKEY_LOCAL_MACHINE, que está siendo anulada por la que definió en su cuenta (que luego se almacenaría en HKEY_CURRENT_USER).
fuente
Microsoft ha cambiado cómo funciona esto desde Windows 8 en adelante. Ya no es posible editar el registro para cambiar esto. Para citar a Microsoft :
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. Instrucciones aquí .
Afortunadamente, Christoph Kolbicz realizó una ingeniería inversa del algoritmo de hash y creó una herramienta llamada SetUserFTA para establecer la asociación del tipo de archivo. Lamentablemente es de código cerrado.
fuente
La confusión aquí es entre lo que se usa para abrir un archivo y lo que se usa para ejecutar un archivo. La clave de registro
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 asume que desea abrir el archivo con la aplicación predeterminada, como si hubiera hecho doble clic en él.
Cambiar la asociación de nuevo a C: \ Programme \ Python27 \ python.exe o editar la clave de registro para que apunte a python debería devolverlo a lo que solía ser, donde Windows asume que desea abrir el archivo con el programa predeterminado, que es python.exe, que luego ejecuta el programa.
fuente
.py\Application
se utiliza para abrir los archivos py. Lo que no entiendo es en qué casosPython.File
se utiliza el valor .PATHEXT
variable). Sin embargo, recuerdo haber leído en el pasado que los asociados hechos desde Explorer siempre sobrescriben los de laClasses
clave de registro.Su mayor pista sobre el propósito y la ubicación está en el "tipo grande", es decir, los nombres de las respectivas colmenas: HKLM y HKCU
Las asociaciones de archivos se establecen en ambas colmenas y tienen dos propósitos diferentes:
Como su nombre lo indica, las entradas del registro HKCU establecen asociaciones de archivos para el USUARIO ACTUAL y anulan la configuración del tipo de archivo correspondiente en HKLM.
HKLM establece asociaciones de archivos para la MÁQUINA LOCAL, es decir, para TODOS LOS USUARIOS de la máquina (a menos que sea anulada por las entradas HKCU). (Para Win98, HKCR era solo un alias abreviado para HKLM \ Software \ Classes. No eran colmenas separadas o diferentes. Sin embargo, esto cambió para Win XP y ya no es cierto. HKCR ahora es una colmena virtual que es el resultado de la fusión las teclas HKLM \ Software \ Classes \, HKCU \ Software \ Classes \ y HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts con prioridad sobre la información HKCU).
Este sistema de dos pasos facilita no solo esquemas de asociación de archivos uno a uno sino muchos a uno y uno a muchos. Por ejemplo, los tipos de archivo .htm, .html y .shtml podrían establecerse en ProgID = htmlfile, lo que a su vez podría definir un solo navegador. OTOH, las entradas pueden contener subclaves OpenWithList o OpenWithProgID con múltiples entradas para abrir un archivo de una lista de múltiples navegadores, editores u otras aplicaciones.
Tanto HKLM \ Software \ Classes \ como HKCU \ Software \ Classes funcionan de la misma manera (una solo tiene prioridad sobre la otra). En la forma más simple, hay una clave de registro para una extensión de archivo (por ejemplo, HKCR.txt) cuyo valor predeterminado es el ProgID correspondiente (por ejemplo, txtfile). Además de, o en lugar de, el valor predeterminado, puede haber nombres ProgID adicionales enumerados para la subclave "OpenWithProgID" (por ejemplo, txtfile y htmlfile), y / o nombres de aplicaciones adicionales que aparecen como subclaves en "OpenWithList" (por ejemplo, Notepad ++ .exe, Opera.exe, Firefox.exe).
Cada ProgID se define en otra clave dentro de HKCR (por ejemplo, HKCR \ txtfile). Esta tecla contiene subclaves para indicarle a Windows qué icono usar y cómo abrir, imprimir, imprimir, etc., el archivo asociado (por ejemplo, HKCR \ txtfile \ shell \ open \ command). Del mismo modo, cada nombre de aplicación se define como una subclave en HKCR \ Aplicaciones (por ejemplo, HKEY_CLASSES_ROOT \ Applications \ Firefox.exe \ shell \ open \ command).
Además de la clave HKCU \ Software \ Classes, las asociaciones de archivos de cuenta de usuario se encuentran en la clave HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts. Estas entradas no son solo para el Explorador de Windows, como se ha sugerido, sino que son una fuente adicional de anulaciones de asociación de archivos de cuentas de usuario. Las entradas son creadas por las herramientas de asociación de archivos en el explorador (Explorer \ Tools \ Opciones de carpeta \ Tipos de archivo) y contienen una subclave OpenWithList y / o OpenwithProgID para cada extensión de archivo enumerada.
Para determinar una asociación de archivos, Windows primero busca las entradas HKCU para una extensión de archivo correspondiente. Solo si no se encuentra uno, entran en juego las entradas HKLM. (Nota: no he probado cuál tiene prioridad: HKCU \ Software \ Classes o HKCU \ MIcrosoft \ Windows \ CurrentVersion \ Explorer \ FileExts, pero sospecho que sería la clave FileExts). Del mismo modo, si no se encuentra un ProgID o nombre de aplicación referenciado en HKCU, se buscan las entradas HKLM. (Tenga en cuenta que las entradas \ Aplicaciones \ son solo nombres arbitrarios, aunque normalmente son idénticas al nombre real del archivo exe del disco).
Entonces, para definir una asociación de archivos para una cuenta de usuario específica, cree entradas en la sección HKCU. Para definir una asociación para todos los usuarios, cree entradas en la sección HKLM (HKCR) y elimine todas las referencias en la sección HKCU a ese tipo de archivo. Obviamente, necesita los derechos de acceso adecuados a las claves de registro.
No uso las herramientas assoc y ftype, ya que prefiero usar RegEdit en modo interactivo o por lotes, pero por otros comentarios parece que solo funcionan en la sección HKLM y son inútiles para borrar / configurar las claves HKCU. Tómese un tiempo y explore las teclas mencionadas anteriormente con RegEdit para ver más ejemplos.
fuente