Запобігання переходу системи PATH%% Windows на користувача% PATH?


13

Я знаю, як налаштувати змінні середовища для системи або користувача:

Windows Environment Variables

Тепер проблема в тому, що PATH змінна обробляється таким чином, що значення, яке ви вводите для користувача PATH, буде автоматично додаються до системи PATH і це буде ефективною змінною PATH.

Тобто, скажімо, у мене

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

та (USER) PATH=C:\Program Files\Bar\bin (зверніть увагу, що немає %PATH% у цьому значенні)

тоді результуюча змінна середовища для цього користувача буде:

(ефективний) PATH=C:\Windows\System32;C:\Program Files\Foo\bin;...;C:\Program Files\Bar\bin

Тим не менш, я хотів би, що для дуже специфічної облікового запису користувача ОС змінна середовища PATH повинна мати bar\bin директорії на початку PATH замість кінця.

Чи є правильний спосіб розпізнати вікна повністю PATH змінна користувача зі значенням для цього користувача, а не додавання його до системи PATH змінної?

Примітка: Очевидно, що з пакетного файлу все це не має значення, оскільки ви можете встановити та налаштувати env.vars, як вам подобається.


Чому б не проігнорувати розділ USER. Видаліть змінну USER Path і вставте все в змінну SYSTEM Path у порядку, в якому ви бажаєте.
Kevin Fegan

1
@KevinFegan: Ну, тому що деякі послуги на машині залежать що СИСТЕМА PATH і цей конкретний обліковий запис користувача краще обслуговуватиметься за допомогою іншого PATH. Я знаю, що існує багато обхідних шляхів, але мені було цікаво, чи є щось з коробки / на рівні ОС / реєстру, щоб досягти цього.
Martin

Відповіді:


1

Якщо вам потрібно це лише для роботи з сеансами командного рядка, створіть пакетний файл профілю / init і налаштуйте його в реєстрі, на https://stackoverflow.com/questions/17404165/how-to-run-a-command-on-command-prompt-startup-in-windows . Наприклад,

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

Потім просто внесіть зміни в PATH в цьому пакетному файлі. Наприклад,

SET USER_PATH=c:\whatever
SET PATH=%USER_PATH%;%PATH%

0

У мене була така ж проблема, і це спрацювало для мене:

Ви можете отримати "змінну шляху користувача" через:

>reg query HKCU\Environment /v path

Вихід (на моїй машині):

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

Але тоді вам доведеться розібрати це і використати відповідну частину.

Я прочитав рішення тут тут і перевірено на моїй машині.


-1

Я не знаю, як ігнорувати системну змінну, але я знаю, що якщо ви використовуєте змінні сеансу (через SET команда), вони мають перевагу над іншими змінними. Таким чином, ви можете використовувати SET PATH=C:\Program Files\Bar\bin інструкція і бажаний шлях буде першою частиною змінної.

Тут є дійсною посиланням, і я повідомляю тут простий період з цієї сторінки:

Якщо змінні з однаковою назвою зберігаються як змінні "Користувач", так і "Машинне середовище", перевага користувача буде мати перевагу. Якщо створюється змінна Session, яка матиме перевагу над будь-якою змінною користувача та / або середовища машини з тим же ім'ям.


Це корисна довідка, але перше, що ви цитували, є надгенералізацією. The PATH змінною є виняток (спеціальний випадок) - змінна користувача робить ні мають перевагу над системною змінною. Той факт, що "сеансова змінна" матиме перевагу над обома користувачами та користувачами; Система заданих змінних є істинною, але як ви набір змінна сеансу автоматично для користувача? G-Wiz відповів на це запитання , і, AFAICS, ви не додали нічого до цієї відповіді.
Scott
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.