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?

Foi útil?

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.

http://www.pinvoke.net/default.aspx/shell32.findexecutable

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top