Действительно, start
-запущенный процесс наследует среду вызывающего процесса ', а не считывает возможно обновленные определения переменных среды из реестра.
Chocolatey поставляется с пакетом файл RefreshEnv.cmd
(C:\ProgramData\chocolatey\bin\RefreshEnv.cmd
, но C:\ProgramData\chocolatey\bin
должен быть в %PATH%
) специально, чтобы избежать необходимости начинать новый независимый сеанс, чтобы обновления среды вступили в силу .
Следовательно, может работать что-то вроде следующего:
:: Assumes that Chocolatey was just installed to the default location.
call "%ProgramData%\chocolatey\bin\RefreshEnv.cmd"
:: If Chocolatey was *previously* installed and its installation directory
:: has already been added to %Path%, the following will do:
:: call RefreshEnv.cmd
call "%relativePath%\RunMe.bat"
Поскольку Chocolatey устанавливается только во время выполнения вашего скрипта, и поэтому его папка binaries еще не находится в %Path%
, вам придется вызывать RefreshEnv.cmd
по его полный путь , как показано выше - который предполагает каталог установки по умолчанию.
Ваш собственный ответ теперь показывает, как обновить sh $env:Path
(%Path%
) переменная окружения с использованием. NET методов непосредственно из PowerShell, что является прагматическим c решением.
Обратите внимание, однако, что RefreshEnv.cmd
является более полным в этой области. t он перезагружает все определения переменных среды и, следовательно, потенциально новые и измененные .
Обратите внимание, что вызов RefreshEnv.cmd
из PowerShell не работает, потому что затем он запускает вне процесса (что означает, что он не может обновить вызывающую среду процесса ').
Однако, Chocolatey предлагает команду Update-SessionEnvironment
PowerShell (с псевдонимом refreshenv
) , которую можно сделать доступной сразу после установки Chocolatey следующим образом:
# Import the module that defines Update-SessionEnvironment aka refreshenv
Import-Module "$env:ProgramData\Chocolatey\helpers\chocolateyProfile.psm1"
# Refresh all environment variables.
Update-SessionEnvironment # or: refreshenv
См. этот ответ для более надежного подхода, который не основывается на предположении, что местоположение по умолчанию установлено в.