Usando arquivos * .reg para definir a variável de ambiente no Windows

1

Estou preparando um conjunto de instruções para automatizar a instalação de alguns aplicativos nos computadores de nossa equipe e, como parte dessa automação, preciso adicionar as variáveis de ambiente do usuário e as variáveis de ambiente do sistema. Estamos usando o Windows XP e o Windows 7

Eu queria fazer isso usando um arquivo * .reg que adicionaria essas variáveis. Então eu tenho várias perguntas:

É o seguinte correto para variáveis de ambiente do usuário:

[HKEY_CURRENT_USER\Environment] e "TEST"="ABC"'

É o seguinte correto para variáveis de ambiente do sistema:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment] e "TEST2"="XYZ"'

Qual é a diferença entre:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
e [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment]

Eu quero atualizar a variável de ambiente PATH, posso fazer algo como:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment] e "PATH"="C:\temp\;%PATH%"'

Obrigado.

    
por RonK 18.11.2010 / 12:55

1 resposta

2

Você está basicamente certo: os locais do usuário e do ambiente do computador. Se você criar valores do tipo REG_SZ, o Windows recusará "expandir" outras variáveis de ambiente que você possa referenciar nelas (ex. "FOO"="% OTHER_VAR% \ bar", pois um REG_SZ criará uma variável de ambiente FOO com a string literal "% OTHER_VAR% \ bar "como seu valor). Criar valores como o tipo REG_EXPAND fará com que o Windows expanda as variáveis. É um comportamento peculiar porque os tipos REG_EXPAND não são realmente "expandidos" pelas APIs de registro.

"CurrentControlSet" é um link simbólico para a instância do ControlSetXXX que está sendo usada. Se você inicializar com um perfil de hardware diferente, obterá um "CurrentControlSet" diferente. Este mecanismo pode ser pensado de forma semelhante a diferentes runlevels em um inittab se você estiver familiarizado com o SYSV * nix.

Para demonstrar que "CurrentControlSet" é realmente um link simbólico basta criar uma nova chave em "HKLM \ System \ CurrentControlSet" e ir procurá-lo em "... \ ControlSet001". Você vai encontrar lá.

Finalmente, o que você quer fazer com o complemento da variável PATH não funcionará. Você não pode ter vários valores de registro na mesma chave com o mesmo nome. Se você criar um valor chamado "PATH", não haverá "% PATH%" para o novo "PATH" expandir. Acrescentar ao PATH é uma falha real de como o caminho é armazenado no registro. Você terá que anexar uma string ao valor "PATH" e, se desejar a desinstalação, precisará analisar a variável "PATH" para recuar quando o usuário desinstala.

    
por 18.11.2010 / 13:08