Programa C ++ precisa de uma associação de arquivos

Estou distribuindo um produto freeware que lê e grava arquivos de texto com uma extensão exclusiva. Eu esperava que clicar duas vezes em um arquivo desse tipo iniciasse automaticamente o aplicativo.

Ao desenvolver no Windows 7 Professional, eu configurei uma associação para abrir meus arquivos após um clique duplo, clicando com o botão direito do mouse no arquivo-> Abrir com ...-> Escolher o Programa Padrão ...-> Procurar ... seguido por "Sempre use o programa selecionado para abrir este tipo de arquivo." Boa. Fez exatamente o que precisava. Eu ia enviar meu programa com instruções para os usuários fazerem o mesmo.

No entanto, quando mudei a localização do binário, vejo que o "Sempre usar" está agora esmaecido / insensível, portanto, embora eu possa navegar para o novo binário, não consegui torná-lo padrão. Como achei que meus usuários também teriam problemas com isso, queria ver se eu poderia fazer com que a instalação ou execução do programa cuidasse do mapeamento.

Eu olhei para o Windows Installer por cerca de 5 minutos antes de determinar que era muito mais poder e complexidade do que eu precisava (para minhas necessidades, um arquivo zip seria suficiente, exceto para este mapeamento de arquivo.)

Então eu dei uma olhada em ter meu programa, na inicialização, configurar o mapeamento em si, se já não estivesse lá. (Eu sei que isso seria um comportamento muito ruim se estivéssemos falando de um tipo de arquivo comum como .html ou .jpg, mas neste caso é uma extensão .blahblah que certamente ninguém mais usa para nada.)

Baseado em informações emhttp://www.cplusplus.com/forum/windows/26987/ ehttp://msdn.microsoft.com/en-us/library/cc144148(v=vs.85).aspx Eu era capaz de ter meu programa, na inicialização, abra HKEY_CLASSES_ROOT \ .blahblah e confirmar (e alterar se necessário) o texto padrão para ser uma descrição precisa do arquivo (substituindo algum texto que pode ter sido criado por padrão quando eu fiz o associação manual no verão passado). No entanto, quando chegou a hora de criar o comando HKEY_CLASSES_ROOT \ firm.app.1 \ shell \ open \, meu wrapper RegCreateKeyEx () que funciona bem para alterar o valor de \ .blahblah está agora dando código de retorno 5, aparentemente sem permissão.

Após pesquisas posteriores, parece que o modelo de permissões pode fazer com que todas essas solicitações falhem. Alguém pode confirmar ou negar isto? Se confirmar, há uma boa referência que eu deveria estudar sobre o assunto?

Caso contrário, quais são as sugestões? Devo morder a bala e estudar o Windows Installer? Ou existe uma maneira de obter as permissões necessárias para editar o registro quando meu próprio software é iniciado pela primeira vez?

Observe que estou desenvolvendo com o Visual Studio 2008 no Windows 7 Professional e, embora ainda seja um programador amador do Windows, tenho feito C ++ desde os anos 80 no Unix / Linux ...

questionAnswers(2)

yourAnswerToTheQuestion