Empêcher le système Windows% PATH% d'être ajouté à l'utilisateur% PATH?

19

Je sais comment définir des variables d'environnement spécifiques au système ou à l'utilisateur:

Variables d'environnement Windows

Maintenant, le problème est que la PATHvariable est traitée de telle sorte que la valeur que vous entrez pour l'utilisateur PATH sera automatiquement ajoutée au système PATH et qui sera la variable PATH effective.

Autrement dit, dis que j'ai

(SYSTÈME) PATH=C:\Windows\System32;C:\Program Files\Foo\bin;...

et (UTILISATEUR) PATH=C:\Program Files\Bar\bin(notez qu'il n'y a pas %PATH%dans cette valeur)

alors la variable d'environnement résultante pour cet utilisateur sera:

(efficace) PATH=C:\Windows\System32;C:\Program Files\Foo\bin;...;C:\Program Files\Bar\bin

Cependant, je préférerais que pour un compte utilisateur de système d'exploitation très spécifique, la variable d'environnement PATH devrait avoir le bar\binrépertoire au début du PATH plutôt qu'à la fin.

Existe-t-il un moyen approprié de dire à Windows de remplacer complètement la PATHvariable d'un utilisateur par la valeur de cet utilisateur au lieu de l'ajouter à la PATHvariable système ?

Remarque: Évidemment, à partir d'un fichier de commandes, tout cela n'a pas d'importance car vous pouvez définir et modifier les env.vars comme vous le souhaitez.

Martin
la source
Pourquoi ne pas simplement ignorer la section UTILISATEUR. Supprimez la variable USER Path et placez tout dans la variable SYSTEM Path, dans l'ordre que vous souhaitez.
Kevin Fegan
1
@KevinFegan: Eh bien, parce que certains services sur la machine dépendent de ce SYSTÈME PATHet que ce compte d'utilisateur spécifique serait mieux servi en ayant un autre PATH. Je sais qu'il existe de nombreuses solutions de contournement, mais je voulais savoir s'il y avait quelque chose hors de la boîte / au niveau du système d'exploitation / du registre pour y parvenir.
Martin

Réponses:

3

Si vous n'en avez besoin que pour les sessions d'invite de commandes, créez un fichier batch profil / init et configurez-le dans le registre, par /programming/17404165/how-to-run-a-command-on -command-prompt-startup-in-windows . Par exemple,

reg add "HKCU\Software\Microsoft\Command Processor" /v AutoRun ^
  /t REG_EXPAND_SZ /d "%"USERPROFILE"%\init.cmd" /f

Ensuite, apportez simplement des modifications au CHEMIN dans ce fichier de commandes. Par exemple,

SET USER_PATH=c:\whatever
SET PATH=%USER_PATH%;%PATH%
G-Wiz
la source
0

J'ai eu le même problème et cela a fonctionné pour moi:

Vous pouvez obtenir une "variable de chemin utilisateur" via:

>reg query HKCU\Environment /v path

La sortie (sur ma machine) est:

HKEY_CURRENT_USER\Environment
    path    REG_SZ    C:\Program Files (x86)\GnuWin32\bin

Mais ensuite, vous devez analyser cela et utiliser la partie appropriée.

J'ai lu la solution ici ici et testé sur ma machine.

user2442366
la source
-1

Je ne sais pas comment ignorer la variable système, mais je sais que si vous utilisez des variables de session (via une SETcommande), elles ont priorité sur les autres variables. Vous pouvez donc utiliser l' SET PATH=C:\Program Files\Bar\bininstruction et le chemin souhaité sera la première partie de la variable.

Voici une référence valide, et je rapporte ici une période simple à partir de cette page:

Si des variables de même nom sont stockées en tant que variables d'environnement utilisateur et machine, la variable utilisateur aura la priorité. Si une variable de session est créée, elle prévaudra sur toute variable d'environnement utilisateur et / ou machine du même nom.

Gabriele Bertolucci
la source
C'est une référence utile, mais la première phrase que vous avez citée est une généralisation excessive. La PATHvariable est une exception (cas particulier) - la variable utilisateur n'a pas la priorité sur la variable système. Le fait qu'une "variable de session" prévaudra sur les variables prédéfinies utilisateur et système est vrai, mais comment définir automatiquement une variable de session pour un utilisateur?  G-Wiz a répondu à cette question et, AFAICS, vous n'avez rien ajouté à cette réponse.
Scott