Script para associar uma extensão para um programa
-
03-07-2019 - |
Pergunta
O meu cliente está substituindo MS Office com o OpenOffice em algumas estações de trabalho. Meu programa de exportação de um arquivo para o Excel usando a extensão .xml (usando o formato aberto) e abre-lo usando o programa associado atual (usando ShellExecute)
O problema é que o OpenOffice não registrar a extensão .xml associado a ele.
associação manualmente funciona bem, mas eu quero fazer uma reg ou algo facilmente alterar a configuração.
Eu estou procurando no registro em um PC com a mudança já feita, mas o
"HKEY_CLASSES_ROOT\.xml"
chave não tem nada OpenOffice referência.
Onde está a associação armazenados? Como posso fazer um script para fazer o trabalho?
Solução
A associação real é armazenado na chave que os pontos "HKEY_CLASSES_ROOT\.xml"
a.
Na minha máquina, o valor padrão dessa chave diz "xmlfile"
, o mais provável que é o mesmo para o seu.
Então vamos para "HKEY_CLASSES_ROOT\xmlfile"
. Lá você pode ver (e alterar) o comando vai ser usado para lançar esse tipo de arquivo:
HKEY_CLASSES_ROOT\xmlfile\shell\open\command
O Windows usa esse tipo de redirecionamento para mapear várias extensões de arquivo para o mesmo tipo de arquivo, e, portanto, para a mesma aplicação.
Sob "HKEY_CLASSES_ROOT\xmlfile\shell"
existem várias sub-chaves que lembram os "verbos" do que você pode fazer para o arquivo. Mais uma vez, o valor padrão da chave "shell"
decide qual destes verbos é usado se você duplo clique no arquivo. No meu caso isso é "open"
.
Conclusão:
Com esse conhecimento, a maneira mais fácil de fazer um script associação é usar regedit para exportar um arquivo .reg que contém essa mudança, e aplicá-lo ao computador de destino com um duplo clique ou:
regedit /s new_xml_association.reg
ou (se você estiver em XP ou superior e sabe o que fazer) substituir o valor atual com:
reg add "HKEY_CLASSES_ROOT\xmlfile\shell\open\command" /ve /d "path\to\program %1"
De qualquer forma, um olhar mais profundo em comando reg add/?
é aconselhada. A primeira solução é mais seguro.
Outras dicas
considerar as dos comandar assoc
:
C:> assoc /? Exibe ou modifica extensão de arquivo associações
ASSOC [.ext [= [tipoArquivo]]]
.ext especifica o arquivo extensão para associar o tipo de arquivo com fileType especifica o arquivo digite a associar com o arquivo extensão
Tipo ASSOC sem parâmetros para exibir as associações de arquivo atuais. Se ASSOC é invocado com apenas um arquivo extensão, ele exibe o atual associação de arquivo para esse arquivo extensão. Especificar nada para o tipo de arquivo eo comando irá apagar a associação para o arquivo extensão.
Usando associações de arquivo, neste caso, parece que a coisa errada a fazer. Você quiser que seu aplicativo para abrir o arquivo no OpenOffice, mas o que se o usuário quer deixar a associação de arquivo para arquivos XML intocado? E se alguma coisa em seu sistema também depende de que a associação? Você está quebrando o seu sistema nesse caso. Se você é a pessoa de TI, em seguida, talvez, que é OK (ainda questionável prática de programação), mas se não, então isso é uma coisa ruim para fazer.
Use a implementação OpenOffice COM para abrir o arquivo em seu lugar.
Boa exemplo simples aqui: http://www.kalitech.fr/clients/doc/VB_APIOOo_en.html
Eu deparei com este, enquanto procurando a mesma resposta. Eu encontrei uma solução melhor usando a API do Windows FindExecutable, que pode ser usado a partir de C # usando PInvoke.