Есть ли команда для обновления переменных среды из командной строки в Windows?

Если вы используете пространства имен

В моих собственных выводах я считаю, что полезно отметить, что вы (насколько я могу судить) должны объявить полный путь пространства имен для класса.

MyClass.php

namespace com\company\lib;
class MyClass {
}

index.php

namespace com\company\lib;

//Works fine
$i = new MyClass();

$cname = 'MyClass';

//Errors
//$i = new $cname;

//Works fine
$cname = "com\\company\\lib\\".$cname;
$i = new $cname;
427
задан Andy McRae 25 October 2017 в 14:29
поделиться

6 ответов

Можно получить системные переменные с vbs сценарием, но Вам нужен bat сценарий для фактического изменения текущих переменных среды, таким образом, это - комбинированное решение.

Создают файл, названный resetvars.vbs содержащий этот код, и сохраняют его на пути:

Set oShell = WScript.CreateObject("WScript.Shell")
filename = oShell.ExpandEnvironmentStrings("%TEMP%\resetvars.bat")
Set objFileSystem = CreateObject("Scripting.fileSystemObject")
Set oFile = objFileSystem.CreateTextFile(filename, TRUE)

set oEnv=oShell.Environment("System")
for each sitem in oEnv 
    oFile.WriteLine("SET " & sitem)
next
path = oEnv("PATH")

set oEnv=oShell.Environment("User")
for each sitem in oEnv 
    oFile.WriteLine("SET " & sitem)
next

path = path & ";" & oEnv("PATH")
oFile.WriteLine("SET PATH=" & path)
oFile.Close

создают другое имя файла resetvars.bat, содержащий этот код, то же местоположение:

@echo off
%~dp0resetvars.vbs
call "%TEMP%\resetvars.bat"

, Когда Вы захотите обновить переменные среды, просто работайте resetvars.bat

<час>

Апологетика :

Эти две основных проблемы у меня было предложение этого решения, были

a. я не мог найти простой способ экспортировать переменные среды из vbs сценария назад к командной строке, и

b. переменная окружения PATH является конкатенацией пользователя и системных переменных ПУТИ.

я не уверен, что общее правило для конфликтующих переменных между пользователем и системой, таким образом, я выбрал делать пользовательскую систему переопределения, кроме переменной ПУТИ, которая обрабатывается конкретно.

я использую странный vbs+bat+temporary bat механизм для работы вокруг проблемы экспорта переменных от vbs.

Примечание : этот сценарий не удаляет переменные.

Это может, вероятно, быть улучшено.

ДОБАВИЛ

, Если необходимо экспортировать среду от одного cmd окна до другого, используйте этот сценарий (давайте назовем его exportvars.vbs):

Set oShell = WScript.CreateObject("WScript.Shell")
filename = oShell.ExpandEnvironmentStrings("%TEMP%\resetvars.bat")
Set objFileSystem = CreateObject("Scripting.fileSystemObject")
Set oFile = objFileSystem.CreateTextFile(filename, TRUE)

set oEnv=oShell.Environment("Process")
for each sitem in oEnv 
    oFile.WriteLine("SET " & sitem)
next
oFile.Close

Выполнение exportvars.vbs в окне Вы хотите экспортировать от [1 128], затем переключиться на окно, которое Вы хотите экспортировать в [1 129], и тип:

"%TEMP%\resetvars.bat"
127
ответ дан Vishrant 25 October 2017 в 14:29
поделиться
  • 1
    Если бы Вы интересуетесь реализацией механизма выполнения сценария как это и хотели бы сообщенную мне руку, PK:-), – Paul Kohler 19 March 2010 в 02:54

Дизайном нет созданы в , механизм для Windows для распространения переменной среды добавляет/изменяет/удаляет к уже под управлением cmd.exe, или из другого cmd.exe или от "Моего Компьютера-> Свойства-> Расширенные настройки-> Переменные среды".

, Если Вы изменяете или добавляете новую переменную среды за пределами объема существующей открытой командной строки, или необходимо перезапустить командную строку, или, вручную добавить НАБОР использования в существующей командной строке.

последний принятый ответ шоу частичное обходное решение путем ручного обновления весь переменные среды в сценарии. Сценарий обрабатывает вариант использования переменных изменяющей среды глобально в "Моем Компьютере... Переменные среды", но если переменная среды изменяется в одном cmd.exe сценарий, не распространят его к другому под управлением cmd.exe.

56
ответ дан Community 25 October 2017 в 14:29
поделиться
  • 1
    Полагайте, что quicksort является O (nlogn), но это могло означать что его O (nlogn+40n) создание Вашего алгоритма на самом деле O (nlogn+42n)... = O (nlogn). – Jim Balter 12 March 2011 в 11:35

нет, я не думаю так..., что можно установить их вручную все же. Таким образом, можно поместить их в пакетный файл или что-то.

, вероятно, мог сделать утилиту/сценарий (если кто-то уже не имеет), который запрашивает реестр и устанавливает текущую среду, чтобы быть тем же

0
ответ дан Keith Nicholas 25 October 2017 в 14:29
поделиться
  • 1
    100% на этом, с надлежащим разделением MVVM, UI только тестируется на корректную привязку и это может быть сделано малочисленной командой QA. – Tom Anderson 14 March 2010 в 22:24

Нет никакого прямого пути, как заявил Kev. В большинстве случаев более просто породить другое поле CMD. Более раздражающе запускающие программы не знают об изменениях ни один (хотя IIRC, там могло бы быть широковещательное сообщение для наблюдения, чтобы быть уведомленным относительно такого изменения).

Это было хуже: в более старых версиях Windows необходимо было выйти из системы, тогда входят для взятия в учетной записи изменений...

1
ответ дан PhiLho 25 October 2017 в 14:29
поделиться
  • 1
    @Alex, я думаю, что мы находимся почти на той же странице, поскольку я, конечно, соглашаюсь, что некоторое определенное для UI тестирование может быть применимым и также иметь большое значение. Однако это описано как " Монстр GUI" то, что они хотят иметь удобный в сопровождении UI, тестирующий, который является " постоянно changing" и " получение нового features" с " back-end" и " слой в between". Вы действительно хотите протестировать ввод и вывод диалогового окна с инструментом UI? Что происходит между вводом и выводом? Вероятно, некоторая бизнес-логика, и это должно произойти в ViewModel или соответствующей абстракции. – Jimmy Lyke 19 March 2010 в 16:26

Если просто необходимо обновить переменные окружения в окнах выполненный refreshenv от терминала, чем перезагрузить ПК.

2
ответ дан 22 November 2019 в 23:09
поделиться

У меня сработал вызов этой функции:

VOID Win32ForceSettingsChange()
{
    DWORD dwReturnValue;
    ::SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM) "Environment", SMTO_ABORTIFHUNG, 5000, &dwReturnValue);
}
15
ответ дан 22 November 2019 в 23:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: