2009-09-24 9 views

Répondre

3

Vous devez modifier cette clé de Registre:

HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Session Manager \ Environment

Les changements sont efficaces après le redémarrage.

+0

J'ai trouvé mon paramètre d'environnement setx dans \ HKEY_CURRENT_USER \ Environment \. Mais merci pour le pointeur sur où regarder dans le registre. Et curieusement, je n'avais pas besoin d'un redémarrage pour que ça affecte le prochain dos \ cmd que j'ai ouvert. Intéressant. – PHenry

4

La commande setx avec une valeur de chaîne vide ne le supprime pas. Et ce n'est pas seulement du picotement, parce que la logique est assez différente. Parce que si la variable spécifique à l'utilisateur remplace une variable globale, il n'est pas possible de supprimer la variable spécifique à l'utilisateur et d'avoir à nouveau la variable globale "redevenue active". La variable spécifique à l'utilisateur de chaîne vide bloque la variable globale. Il faut effectivement l'EFFACER (en utilisant la fenêtre Evironment Variables) pour y parvenir.

J'ai juste essayé aujourd'hui ceci, avec la variable globale JAVA_HOME étant surchargée par un JAVA_HOME spécifique d'utilisateur. Il n'a pas été possible de réactiver le varialble global sans supprimer complètement la variable spécifique à l'utilisateur. Et jusqu'à présent, je n'ai pas vu une méthode pour le faire à partir de la ligne de commande ou du script batch.

(pas assez de points de réputation pour ajouter un commentaire à la réponse ci-dessus à propos de setx, doivent donc ajouter ma propre réponse ...)

+0

point intéressant. voir ma réponse – barlop

11
You may want to make these two permanent with setx but obviously no need to 

    C:\>set uvar=HKCU\Environment 
    C:\> 

    C:\>set mvar=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment 
    C:\> 

Quelques termes
Au sein d'une clé (qui est comme un dossier), vous avez une variable avec des données comme a = 5

http://msdn.microsoft.com/en-us/library/3dwk5axy.aspx parle de nom (a) ayant une valeur (5).

La terminologie du registre est un peu différente sur msdn mais reg.exe et wikipedia semblent cohérents. wikipedia http://en.wikipedia.org/wiki/Windows_Registry dit "Valeurs de registre sont des paires nom/données stockées dans les clés" parle d'une paire nom/données. nomme (a) les données (5) et la paire est une valeur. REG semble utiliser/v qui fait probablement référence à la fois au nom de variable et à ses données (comme dans wikipedia), il affiche à la fois le nom de la variable et ses données. Et REG a un/d qui je suppose est juste pour les données.

Un exemple avec setx

C:\>reg query %uvar% 
    HKEY_CURRENT_USER\Environment 
     TEMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp 
     TMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp 
     ... 



C:\>setx aaa 3 

C:\>reg query %uvar% 

HKEY_CURRENT_USER\Environment 
    TEMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp 
    TMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp 
    ... 
    aaa REG_SZ 3 

Si vous essayez d'utiliser setx pour le supprimer, le plus proche, vous pouvez obtenir est la compensation comme cet article this MS KB article 195050 MS KB dit que vous laisse avec elle encore dans le enregistrement.

setx ne pas supprimer la variable du registre

C:\>setx aaa "" 

SUCCESS: Specified value was saved. 

C:\>reg query %uvar% 

HKEY_CURRENT_USER\Environment 
    TEMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp 
    TMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp 
    ... 
    aaa REG_SZ 


C:\> 

Il convient de noter cependant, que la variable est allé aussi loin que l'invite de cmd est concerné. echo% aaa% affichera% aaa% pour que la variable disparaisse. Il y a juste des déchets inutiles dans le registre maintenant.

l'utilisateur fait un point intéressant, que maintenant lorsque vous essayez de définir une variable à l'échelle du système, cela ne fonctionne pas. car il est écrasé par ce qui est dans la variable utilisateur, dans ce cas, il apparaîtra toujours comme indéfini.

C:\>reg delete %uvar% /v aaa 
Delete the registry value aaa (Yes/No)? y 
The operation completed successfully. 

C:\> 

Notez que aaa a maintenant disparu. Au dessous de.

C:\>reg query %uvar% 

HKEY_CURRENT_USER\Environment 
    TEMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp 
    TMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp 
    ... 


C:\> 

Si vous voulez le faire pour une variable d'environnement système/machine plutôt qu'une variable utilisateur.

-les lignes ci-dessous doivent être d'une invite cmd privilégiée administrative
-Avis la clé est HKLM \ SYSTEM \ CurrentControlSet \ Control session \ Manager \ Environment
-Le% Mvar% (à la différence% UVar%) a besoin de devis Autour de ça, la clé a un espace dedans. Si vous manquez les citations ce n'est pas grave, vous obtenez juste une erreur qui pourrait vous rappeler d'utiliser des citations.
-Et bien sûr, si vous voulez définir une variable d'environnement dans cette partie du registre avec setx, utilisez par exemple. setx aaa 5 -m c'est-à-dire le -m après.

C:\>set mvar=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment 

C:\>reg delete "%mvar%" /v aaa 
Delete the registry value aaa (Yes/No)? y 
The operation completed successfully. 

C:\> 

autre note
Vous pourriez être en mesure de créer une variable d'environnement juste avec REG ADD ou REG SUPPR .. (à la place de setx) mais de toute façon, lorsque vous définissez une variable que vous voudrez peut-être utiliser régler aussi, de sorte qu'il est défini pour la session en cours, pas seulement le prochain. Et un lien re setx https://superuser.com/questions/647505/set-enviroment-variable-setx

0

Si vous voulez éviter le redémarrage, vous devrez trouver un moyen de diffuser un WM_SETTINGSCHANGE à chaque fenêtre active après avoir supprimé la valeur.

Cela fera de nouvelles fenêtres CMD remarquer que la variable a été supprimée (et tout autre programme qui comprend WM_SETTNGSCHANGE).

Questions connexes