Como faço para que ftype & assoc correspondam ao Windows Explorer?

Como faço para que ftype & assoc correspondam ao Windows Explorer?

Alterei a associação a ser usada ao iniciar um .pyarquivo, via Windows Explorer:

  1. Ferramentas -> Pastas -> Tipos de arquivos.
  2. Em seguida, navegue até .py.
  3. Altere a associação para Wordpad.

Agora, quando digito o nome de um arquivo py na linha de comando, o Wordpad o abre.

Mas assoce ftypena 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á a funcionar, mas assocnão ftypetem conhecimento 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 em ftype Python.File. Mas parece que não se acostuma.


(Estou fazendo isso para teste, para que possa escolher facilmente minha versão padrão do Python).

Responder1

Dependendo de como você chama um arquivo dependerá de qual 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. Contudo, é possívelcrie seus próprios verbos. O verbo mais comumente adicionado é oAberto com a família(incluindo OpenWithProgIDs), que adiciona aquele pequeno 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 em um arquivo .jpg, verá que a entrada Abrir com se expande para um submenu que lista Paint.NET, Paint e o que quer que a Microsoft tenha chamado de visualizador de imagens para sua versão do Windows.

Além disso, o que o Unsigned Code Labs disse é muito importante. Ao depurar classes, você precisa observar HKLM\Software\Classes\e HKCU\Software\Classes. HKCRé muito útil para consultar o sistema, mas não tão bom para descobrir por que ele está se comportando mal.

Fiz alguns testes em meu sistema Windows 7 com procmon.exe, e os comandos assoce ftypeparecem tentar gravar diretamente em HKCR, e o sistema aparentemente interpreta isso como gravação em HKLM. Minha conta atual é membro do grupo de administradores, mas o UAC está ativado. Tive acesso negado quando tentei assoc .mytest=MyTest.File.

Estranhamente, se eu criar uma associação clicando com o botão direito em um arquivo chamado test.myteste associando-o ao Bloco de Notas, nem assocverá ftypeessa associação. A associação está definitivamente presente em HKCUe HKCR. Eu não tentei reiniciar, no entanto.

Responder2

não sei como você pode fazer a correspondência entre o registro e o que aparece no ftype e assoc. Para mim e pelo que vejo para você também, os comandos ftype e assoc são inúteis. O que eu faço para alterar o programa padrão para uma determinada extensão de forma programática (em comparação com a maneira padrão e mais simples usando o Explorer) é modificar esta chave de registro

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

Por exemplo, se eu quiser abrir meus mp3s com o mplayer, coloco

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

o valor de "mplayerc.mp3"

Quais são as complicações de fazer isso: primeiro você precisa saber ProgIDs válidos (use ftype) e, segundo, precisa de acesso de gravação a esse hive. O Windows coloca automaticamente uma ACL de negação para a chave UserChoice, então você precisa encontrar uma maneira de remover essa regra de negação para obter acesso de gravação. Eu uso o programa subinacl, que você pode baixar aquihttp://www.microsoft.com/downloads/en/details.aspx?FamilyID=e8ba3e56-d8fe-4a91-93cf-ed6985e3927b&displaylang=enpara modificar as permissões. Além disso, você pode usar o programa de terceiros SetACL. Recomendo o primeiro porque a sintaxe é muito mais simples.

Responder3

A Microsoft mudou a forma como isso funciona do Windows 8 em diante. Não é mais possível editar o registro para alterar isso. Paracitar Microsoft:

No Pré-Win 8, os aplicativos podiam definir o manipulador padrão para um tipo/protocolo de arquivo manipulando o registro, o que significa que você poderia facilmente ter um script ou uma política de grupo manipulando o registro. No entanto, no Win 8, as alterações do registro são verificadas por um hash (exclusivo por usuário e aplicativo) que detecta adulterações por aplicativos. Na ausência de um hash válido, ignoramos o padrão no registro.

A maneira como a Microsoft espera que você mude isso agora é com um arquivo xml implementado por meio da Política de Grupo. Instruçõesaqui.

Felizmente, Christoph Kolbicz fez engenharia reversa do algoritmo de hash e criou uma ferramenta chamadaSetUserFTApara definir a associação do tipo de arquivo. Infelizmente é de código fechado.

Responder4

A confusão aqui é entre o que costumamos fazerabrirum arquivo e o que é usado paracorrerum arquivo. A chave de registro

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

é 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 é executável, a linha de comando assume que você deseja abrir o arquivo com o aplicativo padrão, como se tivesse clicado duas vezes nele.

Alterar a associação de volta para C:\Program\Python27\python.exe ou editar a chave de registro para apontar para python deve retorná-la ao que era antes, onde o Windows assume que você deseja abrir o arquivo com o programa padrão, que é python.exe, que então executa o programa.

informação relacionada