Utilizzo dei file * .reg per la definizione della variabile di ambiente su Windows


1

Sto preparando una serie di istruzioni per automatizzare un'installazione di alcune applicazioni sui computer del nostro team e come parte di tale automazione ho bisogno di aggiungere variabili di ambiente utente e variabili di ambiente di sistema. Stiamo utilizzando sia Windows XP che Windows 7

Volevo farlo usando un file * .reg che aggiungerà queste variabili. Quindi ho diverse domande:

Il seguente è corretto per le variabili di ambiente utente:

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

Il seguente è corretto per le variabili di ambiente di sistema:

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

Qual è la differenza tra:

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

Voglio aggiornare la variabile d'ambiente PATH, posso fare qualcosa del tipo:

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

Grazie.

Risposte:


2

In pratica hai ragione: le posizioni dell'ambiente utente e computer. Se crei valori di tipo REG_SZ, Windows rifiuterà di "espandere" altre variabili di ambiente a cui potresti fare riferimento (ad esempio "FOO" = "% OTHER_VAR% \ bar" poiché REG_SZ creerà una variabile di ambiente FOO con la stringa letterale "% OTHER_VAR% \ bar "come valore). La creazione di valori come tipo REG_EXPAND farà sì che Windows espanda le variabili. È un comportamento bizzarro perché i tipi REG_EXPAND non sono in realtà "espansi" dalle API del registro.

"CurrentControlSet" è un collegamento simbolico all'istanza ControlSetXXX in uso. Se si avvia con un profilo hardware diverso, si otterrà un "CurrentControlSet" diverso. Questo meccanismo può essere vagamente pensato come simile a diversi runlevel in un inittab se hai familiarità con SYSV * nix.

Per dimostrare che "CurrentControlSet" è in realtà un collegamento simbolico, basta creare una nuova chiave in "HKLM \ System \ CurrentControlSet" e cercarla in "... \ ControlSet001". Lo troverai lì.

Infine, ciò che vuoi fare con l'aggiunta alla variabile PATH non funzionerà. Non puoi avere più valori di registro nella stessa chiave con lo stesso nome. Se si crea un valore denominato "PERCORSO", non sarà necessario espandere "% PERCORSO%" per il nuovo "PERCORSO". L'aggiunta al PERCORSO è un vero difetto di come il percorso è memorizzato nel registro. Dovrai aggiungere una stringa al valore "PATH" e, se ti interessa la disinstallazione, dovrai analizzare la variabile "PATH" per annullarla quando l'utente disinstalla.


Grazie Evan, le tue spiegazioni sono molto utili. Potete per favore approfondire "Analisi" della variabile PATH? Posso eseguire questa analisi con i comandi supportati da uno script del Registro di sistema? (Conosco solo la capacità di definire valori e dati)
RonK,

1
Quando dico "analisi", in genere parlo della scrittura del codice del programma per esaminare il contenuto della variabile PATH e manipolarlo (per aggiungere il valore desiderato o per rimuoverlo). Se si desidera "disinstallare" qualcosa che è stato aggiunto alla variabile PATH nel modo giusto di gestire il valore corrente, suddividerlo in "blocchi" (delimitati da ";" caratteri) e rimetterlo insieme w / o il "pezzo" che si desidera rimuovere. Quella "rottura" sta analizzando.
Evan Anderson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.