![]() |
Recentemente, no fórum, foi postada uma dúvida no fórum em relação a alterar as variáveis de ambiente pelo Inno Setup.Aproveitei a deixa para fazer uma postagem sobre isso.Fórum: https://techblog.desenvolvedores.net/bbpress/topic.php?id=11.
O Inno Setup pode ser baixado em http://www.jrsoftware.org/isdl.php é um ótimo gerador de instalador para suas aplicações e não deixa nada a desejar eu o uso desde sua segunda versão para instalar as minhas aplicações. Para o artigo vou pegar como exemplo a variável Path, que foi a dúvida postada, mas isto serve para qualquer tipo de variável. Para as versões NT/2000/XP/2003 e atuais. As variáveis de ambiente ficam na seguinte chave do registro. Para máquina: Para o usuário: Para as versões 95/98/Me, é necessário modificar o arquivo AUTOEXEC.BAT. Mas não vamos falar sobre isso aqui. O caminho na chave do registro para Path é um valor do tipo REG_EXPAND_SZ. “ Original: [Registry] Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};C:\foo"; Onde C:\foo é o nosso caminho Veja: [Registry] Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};C:\foo"; Check: CheckKey('Path','C:\foo') Vamos escrever a função CheckKey, esta função lê o valor do caminho original e verifica se o valor informado já está na chave do registro. [Code] //@param key: chave do registro a ser validada //@param value: valor a ser procurado function CheckKey(key:string; value: string): boolean; var OrigPath: string; begin if not RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', key, OrigPath) then begin //vai retornar true se o valor não existir Result := True; exit; end; // se existir, temos que procurar por ele na variável inteira // A função Pos() retorna 0 se não encontrado Result := Pos(';' + value + ';', ';' + OrigPath + ';') = 0; end; Código completo do script para estudo: #define MyAppName "Desenvolvedores" #define MyAppVersion "1.5" #define MyAppPublisher "desenvolvedores.net" #define MyAppURL "http://desenvolvedores.net" #define MyAppExeName "desenvolvedores.exe" [Setup] AppId={{006DC1BE-0C38-46DF-AF73-CC79E3A1E9F4} AppName={#MyAppName} AppVersion={#MyAppVersion} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} DefaultDirName={pf}\{#MyAppName} DisableDirPage=yes DefaultGroupName={#MyAppName} OutputBaseFilename=setup Compression=lzma SolidCompression=yes [Languages] Name: "portugues"; MessagesFile: "compiler:Languages\Portugues.isl" [Registry] Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};C:\foo"; Check: CheckKey('Path','C:\foo') [Code] //@param key: chave do registro a ser validada //@param value: valor a ser procurado function CheckKey(key:string; value: string): boolean; var OrigPath: string; begin if not RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', key, OrigPath) then begin //vai retornar true se o valor não existir Result := True; exit; end; // se existir, temos que procurar por ele na variável inteira // A função Pos() retorna 0 se não encontrado Result := Pos(';' + value + ';', ';' + OrigPath + ';') = 0; end; Chegamos ao fim do artigo. Desde modo podemos modificar as variáveis de ambiente que precisamos. Uma ótima fonte de ajuda também é o FAQ do Inno http://www.jrsoftware.org/isfaq.php |
É isso ai pessoal 🙂
Até o próximo
♦ Marcelo