Associação de tipo de arquivo com aplicativo (C #)

Eu tenho algumas perguntas relacionadas:

1) É possível fazer com que meu programa altere a associação de tipo de arquivo, mas somente quando está em execução? Você vê algo de errado com esse comportamento?

2) A outra opção que estou vendo é permitir que os usuários decidam abrir com o meu aplicativo ou restaurar a associação padrão … algo como: “capturar todos os arquivos .lala” ou “restaurar a associação .lala”. Como posso fazer isso? O que você acha que é a melhor abordagem?

Em relação às associações de arquivos, escrevi anteriormente uma resposta que, pelo menos, abrange o “como” .

Isso também deve apontar para a direção correta como lidar com backup e restauração. Com access direto ao registro através de c #, não haverá necessidade de usar arquivos .reg, então você está livre para fazer o backup do valor anterior da maneira que quiser no seu aplicativo, e também restaurá-lo de lá.

A questão chave aqui é: você deve alterar as associações de arquivos aleatoriamente? Pelo menos perguntar ao usuário na frente obviamente seria necessário (como você também indicou).

Além disso, os usuários do Vista com usuários habilitados para UAC ou não privilegiados de outras versões do Windows podem não ter a permissão necessária para alterar as associações globais de arquivos. O (des) procedimento de instalação do seu programa pode ser o único lugar onde isso pode ter sucesso.

EDITAR

Como Franci Penov indicou em sua resposta , existe uma maneira de alterar associações de arquivos locais por usuário, mesmo para não administradores (é por isso que falei de “associações globais” no parágrafo anterior). Ele também mencionou por que não é excessivamente recomendável.

Você pode implementar uma alteração de associação de arquivo “on the fly” associando um pequeno executável a uma extensão de arquivo que, ao iniciar, verificará se o aplicativo principal está sendo executado e passará o nome do arquivo para ele ou se não estiver sendo executado, invocará ” aplicação associada “regular”.

A principal vantagem desta abordagem é que você precisa mexer com o registro apenas uma vez.

As principais desvantagens desta abordagem são:

  • você precisa de um processo auxiliar
  • o aplicativo que “possui” essas extensões de arquivo pode detectar a alteração e reclamar para o usuário, solicitando “reparo”, tirando você da imagem.

Alternativamente, você pode alterar a associação do arquivo no início do seu programa principal. Isso funcionará mesmo para usuários não administradores. Enquanto associações de arquivos são armazenadas em HKEY_CLASSES_ROOT , há um pequeno truque – HKCR é na verdade um mapa de HKEY_LOCAL_MACHINE\SOFTWARE\Classes e HKEY_CURRENT_USER\SOFTWARE\Classes . Assim, você pode registrar temporariamente a extensão do arquivo para o usuário atual no HKCU e “sombrear” a associação original do HKLM.

Claro, eu aconselharia contra essa abordagem, já que é preciso apenas uma falha em seu aplicativo para tornar essa associação permanente e, como pouquíssimos aplicativos sabem como lidar com associações de arquivos no HKCU, é provável que seja uma situação irrecuperável a aplicação original.

Provavelmente pode ser feito, mas acho que acabaria sendo complicado. Todas as associações de tipo de arquivo são armazenadas no registro para que você precise gravar / reverter as inputs do Registro toda vez que seu aplicativo for iniciado e interrompido. Além disso, dependendo da frequência com que você faz isso, as novas associações podem não ser apanhadas no Windows explorer imediatamente.

As associações estão listadas em HKEY_CLASSES_ROOT no registro e podem ser mapeadas em uma infinidade de maneiras (tipos mime / progIDs / etc).

Muitos aplicativos que tenho visto perguntam se você deseja associar certos tipos de arquivos ao aplicativo durante o tempo de instalação e permitem desativar e deixar as configurações atuais.

Eu não acho que eu recomendaria associações de tipo de arquivo “on the fly”

1) você pode definir os tipos de arquivo que estão na lista suspensa do tipo de arquivo Abrir Diálogo. Fora isso, é possível alterar o tipo de arquivo padrão no aplicativo aberto e, em seguida, replace durante o fechamento do aplicativo, pois a associação de tipo de arquivo é apenas uma configuração do registro.

Quanto ao errado, eu não faria. A primeira razão é que esse não é o comportamento padrão dos aplicativos. A segunda razão é que, se o aplicativo ou o PC sair inesperadamente, você corre o risco de não retornar a associação à configuração original.

2) O Windows por padrão permite que o usuário escolha essas opções utilizando o botão direito do mouse eo comando “abrir com”.