Windows- como faço para criar minhas próprias extensões de arquivo e associá-las a meu próprio programa?

1

Eu desenvolvi um aplicativo C # WPF que exibirá arquivos .pdf para o usuário. O usuário pode carregar o PDF diretamente

File --> Load --> (select PDF file) --> Open

Depois de selecionar o PDF e pressionar Abrir, o PDF é exibido dentro do aplicativo.

Ou eles podem abrir uma pasta ZIP que contenha um único arquivo PDF, e o PDF dentro desse ZIP será automaticamente mostrado ao usuário de dentro do aplicativo

File --> Load --> (select ZIP folder) --> Open

depois de selecionar o CEP, (é sabido que o conteúdo do zip consiste inteiramente em um único PDF), e pressionando aberto, o PDF dentro desse ZIP é exibido de dentro do aplicativo (da mesma maneira que abrir um PDF diretamente).

Agora quero modificar meu programa para que ele possa abrir uma 'pasta' com uma extensão personalizada - por exemplo, desejo criar uma pasta semelhante a um ZIP - contendo um único arquivo PDF, mas a extensão dessa pasta deve ser algo que eu escolha, em vez de .zip , por exemplo, para que eu possa ter uma pasta compactada chamada folder.abc , contendo um único PDF xyz.pdf .

Em seguida, quero associar a extensão .abc ao meu aplicativo para que, sempre que o usuário clicar duas vezes em um .abc file / folder, ele seja aberto automaticamente pelo meu aplicativo.

O que eu não sei é como posso criar uma extensão personalizada e usá-la? Por exemplo, como eu poderia alterar folder.zip para folder.abc e ter algo com uma extensão .abc automaticamente atribuída para ser aberto pelo meu aplicativo quando um usuário clica duas vezes nele?

Editar

Ok, posso criar arquivos personalizados com minha própria extensão criando um arquivo .txt, abrindo-o e salvando-o novamente, definindo seu 'tipo' como All Files e dando a ele um nome que termine em .abc , ou seja, customFile.abc , e posso associar minha extensão ao meu aplicativo clicando com o botão direito do mouse, indo para 'Abrir com' e selecionando meu próprio aplicativo.

Eu também posso fazer isso com uma pasta ZIP da mesma maneira.

No entanto, quando eu abro no momento qualquer um dos arquivos / pastas para os quais dei a extensão personalizada, eles apenas abrem meu aplicativo com uma janela em branco, ou seja, os arquivos .pdf que eles contêm não são exibidos. use minha janela de aplicativo para abri-los. Eu faço isso selecionando Arquivo - > Abra e escolha o arquivo .abc no qual acabei de clicar duas vezes para abrir a janela do meu aplicativo e, em seguida, exibe o PDF que este arquivo .abc contém ...

Por que ele não exibe automaticamente o arquivo .pdf contido quando clico nele duas vezes no Windows Explorer?

    
por someone2088 10.06.2016 / 16:40

1 resposta

3

Existem várias maneiras pelas quais isso pode ser feito. Por exemplo, você pode mexer com o registro usando ferramentas padrão de edição de registro. No entanto, há também uma maneira de afetar isso usando a linha de comando. Como isso é provavelmente mais fácil para automação, essa é uma boa maneira de demonstrar isso. Como sua pergunta apareceu em uma extensão composta de .abc , eu uso isso.

Em uma linha de comando, acesse um prompt de comando. Se você tiver o UAC habilitado, isso precisa ser um prompt de comando elevado.

Primeiro, crie um tipo de arquivo. por exemplo:

ftype zzzfile=C:\Windows\System32\Notepad.exe %%1

Em seguida, veja seus resultados:

ftype zzzfile e reg query HKCR\zzzfile\SHELL\OPEN\COMMAND /ve

Notas:

  • Ao criar este tipo de arquivo, o "%% 1" serve para escapar do sinal de porcentagem. Os dois sinais percentuais tornam-se um. Então, quando você visualizar os resultados, ele simplesmente mostrará "% 1" em vez de "%% 1".
  • Ao criar o tipo de arquivo, é necessário especificar todo o nome do executável. As coisas não vão funcionar bem se você acabou de dizer "Notepad". (Por "coisas não funcionam bem", quero dizer que o Windows irá perguntar ao usuário o que fazer com a extensão.) O C: \ Windows \ System32 \ realmente parecia opcional, mas o ". Exe" não. / li>

Em seguida, associe uma extensão ao seu tipo de arquivo. Novamente, isso modifica o comportamento do sistema, portanto, se o UAC estiver ativado, acesse um prompt de comando elevado. Executar:

assoc .abc=zzzfile

Agora, a partir desse prompt de comando ou de um não elevado, você pode verificar seus resultados:

assoc .abc e start filename.abc

(testado com o Windows 7 x64).

Nota: Durante os testes preliminares, eu mucked com o GUI. Isso impediu o uso de FTYPE e ASSOC de funcionar corretamente, com a mesma extensão.

Detectar o problema foi bastante simples. Consertar isso não foi.

Consegui encontrar o problema usando isto:

REG QUERY HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.abc /s

Tragicamente, isso NÃO funcionou para excluí-lo:

REG DELETE HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.abc e REG DELETE HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.abc\UserChoice /v Progid

Confirmei o problema com um programa gráfico: REGEDIT no UserChoice, em seguida, Editar, "Permissões ...", (meu nome de usuário), Avançado, (guia Permissões) mostrou que eu tinha um DENY, digite Especial. Edit ... de lá mostrou "Set Value" teve Negar.

Uma maneira de corrigir isso a partir da linha de comando parece ser REGINI, do kit de recursos do NT 4. Para fazer as coisas dessa maneira, eu precisava descobrir meu SID.

wmic USERACCOUNT Obter nome, SID (Encontre minha conta. O SID começa com "S -".)

Crie um arquivo de texto. Eu decidi chamar de "fix.txt".

KB 254031 indicou que a primeira linha é "\ Registry \ User \" seguida do SID do usuário . Então o arquivo de texto vai começar com isso.

Apesar de alguns exemplos em vários artigos da Microsoft na Microsoft, a sintaxe pode ser tão curta quanto uma única linha, como mostrado (mas precisando de personalização ...)

\Registry\User\S-#-#-##-##########-##########-##########-1000\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.abc\UserChoice [1 5 7 17]

(Naturalmente, ajuste o ".abc" para qualquer extensão que você esteja tentando consertar. Os # também precisam ser substituídos, para que um SID válido seja usado.)

Em seguida, use esse arquivo de texto com: REGINI fix.txt

Agora que a chave não está nos impedindo de fazer alterações, podemos excluir o valor Progid da chave UserChoice. Na verdade, vá em frente e exclua a chave inteira relacionada a essa extensão.

REG DELETE HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.abc

Então, essa chave de registro não foi mais substituída, então os resultados de FTYPE e ASSOC estavam entrando em vigor conforme desejado.

    
por 10.06.2016 / 17:14