Alterei a associação a ser usada ao iniciar um .py
arquivo, via Windows Explorer:
- Ferramentas -> Pastas -> Tipos de arquivos.
- Então navegue para
.py
. - Mude a associação para Wordpad.
Agora, quando digito o nome de um arquivo py na linha de comando, o Wordpad o abre.
Mas assoc
e ftype
na linha de comando ainda retorne o seguinte:
C:\> assoc .py
.py = Python.File
C:\> ftype Python.File
Python.File = "C:\Program\Python27\python.exe" "%1" %*
Como é que a associação está funcionando, mas assoc
e ftype
não está ciente disso?
Eu reiniciei o prompt.
Mais informações do meu 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
Mais registro:
HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command\(Standard)
= "C:\Program\Python27\python.exe" "%1" %*`
Suponho que é isso que está aparecendo ftype Python.File
. Mas isso não parece se acostumar.
(Estou fazendo isso para teste, para que eu possa eventualmente escolher minha versão padrão do Python facilmente).
windows-xp
file-association
Gauthier
fonte
fonte
Respostas:
Dependendo de como você chama um arquivo, depende do verbo usado. O verbo que você usa determina o que o Windows fará com ele. Os verbos padrão são Abrir, Editar, Imprimir, Reproduzir e Visualizar. No entanto, é possível criar seus próprios verbos . O verbo mais comumente adicionado é a família Abrir com (incluindo o OpenWithProgIDs), que adiciona esse submenu de contexto em "Abrir com" para fornecer alternativas possíveis. Se você instalar o Paint.NET, por exemplo, e clicar com o botão direito do mouse em um arquivo .jpg, a entrada Abrir com será expandida para um submenu que lista o Paint.NET, o Paint e o que a Microsoft chamou de visualizador de imagens para sua versão do Windows.
Além disso, o que a Unsigned Code Labs disse é muito importante. Quando você está depurando classes, precisa observar
HKLM\Software\Classes\
eHKCU\Software\Classes
.HKCR
é muito útil para consultar o sistema, mas não é tão bom para descobrir por que está se comportando mal.Fiz um pequeno teste no meu sistema Windows 7 com
procmon.exe
, e os comandosassoc
eftype
parecem tentar gravar diretamenteHKCR
, e o sistema aparentemente interpreta isso como escrevendo paraHKLM
. Minha conta atual é membro do grupo de administradores, mas o UAC está ativado. O acesso foi negado quando tenteiassoc .mytest=MyTest.File
.Estranhamente, se eu criar uma associação clicando com o botão direito do mouse em um arquivo chamado
test.mytest
e associando-o ao Bloco de Notas, ele tambémassoc
nãoftype
vê essa associação. A associação está definitivamente lá dentroHKCU
eHKCR
. Eu não tentei reiniciar, no entanto.fonte
não sei como você pode fazer a correspondência entre o registro e o que aparece no ftype e assoc. Para mim e como eu vejo você também, o comando ftype e assoc é inútil. O que eu faço para alterar o programa padrão de uma extensão dada de maneira programática (em comparação com a maneira mais simples e padrão usando o explorer) é modificar essa chave do registro
Por exemplo, se eu quiser abrir meus mp3s com o mplayer, coloquei
o valor de "mplayerc.mp3"
Qual é a complicação de fazer isso: primeiro você precisa conhecer ProgIDs válidos (use ftype) e, em segundo lugar, você precisa ter acesso de gravação a essa seção. O Windows coloca automaticamente uma ACL de negação para a chave UserChoice, portanto, você precisa encontrar uma maneira de remover essa regra de negação para obter o acesso de gravação. Eu uso o programa subinacl, que você pode baixar aqui http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e8ba3e56-d8fe-4a91-93cf-ed6985e3927b&displaylang=en para modificar as permissões. Além disso, você pode usar o programa de terceiros SetACL. Eu recomendo o primeiro porque a sintaxe é muito mais simples.
fonte
O Explorer (o shell do Windows) sempre dá preferência ao aplicativo especificado na chave do fornecedor, especificada no valor padrão da extensão. (No seu caso,
.py
é a extensão,Python.File
é a chave do fornecedor.)ftype
eassoc
pode ler seus valores de outras áreas, não sei ao certo. É assim que o Explorer faz isso.EDIT: Esta página pode ser do seu interesse: MSDN - Tipos de Arquivos
Especialmente isso:
Talvez seja aqui que as diferentes partes do Windows se chocam, se houver uma associação "padrão" em HKEY_LOCAL_MACHINE, que será substituída pela que você definiu em sua conta (que seria armazenada em HKEY_CURRENT_USER).
fonte
A Microsoft mudou a maneira como isso funciona a partir do Windows 8. Não é mais possível editar o registro para alterar isso. Para citar a Microsoft :
A maneira como a Microsoft espera que você altere isso agora é com um arquivo xml implementado por meio da Diretiva de Grupo. Instruções aqui .
Felizmente, Christoph Kolbicz fez a engenharia reversa do algoritmo de hash e criou uma ferramenta chamada SetUserFTA para definir a associação do tipo de arquivo. Infelizmente, é de código fechado.
fonte
A confusão aqui é entre o que é usado para abrir um arquivo e o que é usado para executar um arquivo. A chave do registro
é o que informa ao Windows como abrir o arquivo. Clicar duas vezes no arquivo abrirá o arquivo com este aplicativo.
Como o arquivo não é um arquivo executável, a linha de comando pressupõe que você deseja abrir o arquivo com o aplicativo padrão, como se você tivesse clicado duas vezes nele.
Alterar a associação de volta para C: \ Program \ Python27 \ python.exe ou editar a chave do registro para apontar para python deve retorná-la ao modo como costumava ser, onde o Windows pressupõe que você deseja abrir o arquivo com o programa padrão, que é o python.exe, que executa o programa.
fonte
.py\Application
é usada para abrir os arquivos py. O que eu não entendo é em que casos o valorPython.File
é usado.PATHEXT
variável). No entanto, lembro-me de ler no passado que os associados criados no Explorer sempre substituem os daClasses
chave do registro.Sua maior pista para o propósito e localização está no "tipo grande", ou seja, os nomes das respectivas colméias: HKLM e HKCU
As associações de arquivos são definidas nas duas seções e têm dois propósitos diferentes:
Como o nome indica, as entradas do Registro HKCU definem associações de arquivos para o USUÁRIO ATUAL e substituem as configurações de tipo de arquivo correspondentes no HKLM.
O HKLM define associações de arquivos para o LOCAL MACHINE, ou seja, para TODOS OS USUÁRIOS da máquina (a menos que sejam substituídos pelas entradas do HKCU). (No Win98, o HKCR era apenas um alias abreviado para HKLM \ Software \ Classes. Eles não eram seções separadas ou diferentes. No entanto, isso foi alterado para o Win XP e não é mais verdadeiro. O HKCR agora é uma seção virtual resultante da fusão as chaves HKLM \ Software \ Classes \, HKCU \ Software \ Classes \ e HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts com as informações do HKCU prevalecendo.)
Esse sistema de duas etapas facilita não apenas os esquemas de associação de arquivos um para um, mas muitos para um e um para muitos. Por exemplo, os tipos de arquivo .htm, .html e .shtml podem ser definidos como ProgID = htmlfile, que por sua vez pode definir um único navegador. OTOH, as entradas podem conter subchaves OpenWithList ou OpenWithProgID com várias entradas para abrir um arquivo de uma lista de vários navegadores, editores ou outros aplicativos.
HKLM \ Software \ Classes \ e HKCU \ Software \ Classes operam da mesma maneira (uma apenas tem precedência sobre a outra). Na forma mais simples, existe uma chave de registro para uma extensão de arquivo (por exemplo, HKCR.txt) cujo valor padrão é o ProgID correspondente (por exemplo, txtfile). Além do valor padrão, ou em vez do valor padrão, pode haver nomes adicionais de ProgID listados para a subchave "OpenWithProgID" (por exemplo, txtfile e htmlfile) e / ou nomes de aplicativos adicionais que aparecem como subchaves em "OpenWithList" (por exemplo, Notepad ++ .exe, Opera.exe, Firefox.exe).
Cada ProgID é definido em outra chave no HKCR (por exemplo, HKCR \ txtfile). Essa chave contém subchaves para informar ao Windows qual ícone usar e como abrir, imprimir, imprimir etc. o arquivo associado (por exemplo, HKCR \ txtfile \ shell \ open \ command). Da mesma forma, cada nome de aplicativo é definido como uma subchave em HKCR \ Applications (por exemplo, HKEY_CLASSES_ROOT \ Applications \ Firefox.exe \ shell \ open \ command).
Além da chave HKCU \ Software \ Classes, as associações de arquivos da conta do usuário são encontradas na chave HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts. Essas entradas não são apenas para o Windows Explorer, como foi sugerido, mas são uma fonte adicional de substituições de associação de arquivos de contas de usuários. As entradas são criadas pelas ferramentas de associação de arquivos no explorer (Explorer \ Tools \ Opções de Pasta \ Tipos de Arquivos) e contêm uma subchave OpenWithList e / ou OpenwithProgID para cada extensão de arquivo listada.
Para determinar uma associação de arquivos, o Windows procura primeiro nas entradas HKCU uma extensão de arquivo correspondente. Somente se um não for encontrado, as entradas HKLM entrarão em jogo. (Observação: não testei o que tem precedência - o HKCU \ Software \ Classes ou HKCU \ MIcrosoft \ Windows \ CurrentVersion \ Explorer \ FileExts, mas suspeito que seria a chave FileExts). Da mesma forma, se um ProgID ou nome de aplicativo referenciado não for encontrado no HKCU, as entradas HKLM serão pesquisadas. (Observe que as entradas \ Applications \ são apenas um nome arbitrário - mesmo que normalmente sejam idênticas ao nome real do arquivo exe no disco).
Portanto, para definir uma associação de arquivo para uma conta de usuário específica, crie entradas na seção HKCU. Para definir uma associação para todos os usuários, crie entradas na seção HKLM (HKCR) e exclua todas as referências na seção HKCU para esse tipo de arquivo. Obviamente, você precisa dos direitos de acesso apropriados às chaves do registro.
Não uso as ferramentas assoc e ftype, pois prefiro usar o RegEdit no modo interativo ou em lote, mas a partir de outros comentários, parece que eles operam apenas na seção HKLM e são inúteis para limpar / configurar as chaves HKCU. Reserve um tempo e navegue pelas teclas acima mencionadas com o RegEdit para ver mais exemplos.
fonte