INNO SETUP LER REGISTRO DO WINDOWS

MAXCIM 06/07/2011 11:41:25
#378583
Olá amigos, estou montando um setup de atualização do sistema com o INNOSETUP e preciso que o DefaultDirName venha carregado com o diretorio padão do aplicativo, que pode ser diferente de cliente para cliente.
e neste caso tenho salvo no registro do Windows o patch da aplicação.

a ideia é fazer uma function na inicialização do setup e verificar se há diretorio padão no reg do windows se sim carrega pro DefaultDirName esse valor, caso não preenche o DefaultDirName com diretorio padrão.

desde já agradeço!
MARCELO.TREZE 06/07/2011 12:10:37
#378586
Criando chaves no registro

A criação de chaves no registro durante a instalação pode ser feita com a função [Registry]. Algumas flags especiais devem ser usadas nas chaves que o seu programa criar, para que elas possam ser removidas automaticamente na desinstalação. Já nas chaves públicas ou do Windows, em que o seu programa simplesmente alterar alguns valores, tenha cuidado: nunca use a flag para remoção na desinstalação.

As entradas da seção [Registry] têm basicamente esta sintaxe:


[Registry]

Root: HKCU; SubKey: ChaveSubchave; ValueType: TipoDoValor; ValueName: NomeDoValor; ValueData: DadoDoValor;

O parâmetro Root define a chave root do registro que será alterada. Você deve colocar HKCU para a HKEY_CURRENT_USER, ou HKLM, para a HKEY_LOCAL_MACHINE (entre outras). No SubKey, defina o caminho desejado. Ele não precisa existir no sistema. Se não existir, será criado automaticamente. Por exemplo, [Ô]SoftwareMinha\EmpresaMeu\Programa[Ô]. Lembre-se de colocar textos que contenham espaços entre aspas. Em ValueType, defina o tipo do valor, que pode ser dword (inteiro), string (os mais usados), entre alguns outros. Para valores booleanos, use dword, e atribua ao valor 1 para True, ou 0 para False. Em ValueData, como era de se esperar, coloque o dado do valor. Se for uma string, prefira colocar entre aspas. Um exemplo:


Root: HKCU; SubKey: [Ô]SoftwareMinha\EmpresaMeu\programa[Ô]; ValueType: dword; ValueName: UsarCoresPersonalizadas; ValueData: 1;

Isso colocaria o valor 1 neste local:

HKEY_CURRENT_USER\Software\Minha Empresa\Meu programa, valor dword [Ô]UsarCoresPersonalizadas[Ô], com o valor 1. Outro exemplo, agora com uma string, que uso num dos meus programas:


Root: HKCU; SubKey: [Ô]SoftwareMepMep Texto[Ô]; ValueType: string; ValueName: Skin; ValueData: [Ô]{app}skins_Default Mep Texto 5.skn[Ô];

Repare que você pode usar constantes do Inno Setup no valor, se precisar, para usar caminhos de pastas ou arquivos que variam de sistema para sistema - como no caso, usei a {app} para retornar a pasta da aplicação, já que queria referenciar um arquivo dentro dela.

Apesar de não ser necessário seguir a ordem no script do Inno para as chaves do registro, uma organização sempre faz bem. Por experiências próprias com ele, sugiro criar as chaves definindo que elas deverão ser removidas após a instalação, e só depois de declarar isso, colocar as entradas que gravarão os valores propriamente ditos. Por exemplo:


Root: HKLM; SubKey: SoftwareEmpresa; Flags: uninsdeletekeyifempty

Root: HKCU; SubKey: SoftwareEmpresa; Flags: uninsdeletekeyifempty

Root: HKLM; SubKey: SoftwareEmpresaPrograma; Flags: uninsdeletekey

Root: HKCU; SubKey: SoftwareEmpresaPrograma; Flags: uninsdeletekey


Isso supondo que você grave as configurações do seu programa na chave HKEY_CURRENT_USER Software Empresa Programa. Caso você tenha vários programas da mesma empresa, pode guardar as configurações dos outros numa subchave da chave da empresa, que serão vistos pelo editor do registro do Windows como pastinhas:



Seguindo a forma exemplificada nas 4 linhas mais acima, você obtém um instalador mais [Ô]profissional[Ô]. Ele cria a chave para a empresa, se ainda não existir, e configura para removê-la na desinstalação apenas se estiver vazia (com o uso da flag uninsdeletekeyifempty). Após isso, cria a chave do programa, dentro da chave da empresa, e configura para remoção na desinstalação, mesmo se não estiver vazia (já que está removendo o programa, não teria porque manter a chave do registro dele). A flag uninsdeletekey faz com que a chave e todas as suas subchaves sejam removidas na desinstalação. Caso você tenha vários programas, eles nunca removerão as configurações dos outros, pois cada um terá sua própria chave, sob o nome da chave da empresa. Ao desinstalar o último programa desta empresa, é que a chave da empresa será removida. Antes disso, não, pois com o uso da flag uninsdeletekeyifempty para a chave da empresa, esta não será excluída se ainda existirem subchaves (provavelmente de seus outros programas). Uma dica é colocar na ordem exibida. Na desinstalação, o Inno Setup executa as funções correspondentes de baixo para cima no script, as primeiras entradas serão as últimas a serem tratadas na desinstalação.

Caso você não queira usar uma chave para a empresa (que pode ser o seu nome, o produtor do programa), pode então usar diretamente uma para o programa, ficando assim apenas:


Root: HKLM; SubKey: SoftwarePrograma; Flags: uninsdeletekey

Root: HKCU; SubKey: SoftwarePrograma; Flags: uninsdeletekey



Nota: exemplifiquei com o uso do mesmo caminho de chave sob a HKEY_LOCAL_MACHINE e HKEY_CURRENT_USER. Para guardar as configurações do usuário, sempre prefira a HKEY_CURRENT_USER, use a HKEY_LOCAL_MACHINE para guardar dados durante a instalação que deverão estar acessíveis para leitura por todos os usuários.

Nunca use o uninsdeletekey em chaves usadas por outros programas ou pelo Windows. E a definição das chaves que seu programa usará deve ser feita no projeto do programa, não apenas na hora da criação do instalador. Se seu programa irá criar novas chaves em outros locais depois de aberto, é uma boa incluí-las para remoção, bastando definir da forma acima, como se fosse criá-las, e usar as flags uninsdeletekey ou uninsdeletekeyifempty, dependendo da situação.

Fonte: http://www.hardware.com.br/tutoriais/inno-setup/
MAXCIM 11/07/2011 17:37:51
#378958
Olá Marcelo, Obrigado pelas dicas.. são bem completas.
porem o meu problemas pernamece.. aqui no exemplo , mostra como escrever no registro... e preciso justamente do contrario.
preciso ler o registro e carregar para DefaultDirName={pf}\ o nome do projeto.

para quanto rodar o update ele pegue o endereço da aplicação no registro e copie para este endereço os itens do update.

desde já agradeço
MAXCIM 14/07/2011 16:06:31
#379173
dando um up
Tópico encerrado , respostas não são mais permitidas