Прошёл прошлый вопрос по этому поводу. Основная идея состоит в том, чтобы установить переменную в реестре через Win32 :: Registry (как сказал runako). Затем вы можете передать сообщение WM_SETTINGCHANGE, чтобы внести изменения в среду. Конечно, вы могли бы также выйти из системы, но не очень удобно.
Регистрационный код:
require 'win32/registry.rb'
Win32::Registry::HKEY_CURRENT_USER.open('Environment', Win32::Registry::KEY_WRITE) do |reg|
reg['ABC'] = '123'
end
WM_SETTINGCHANGE код:
require 'Win32API'
SendMessageTimeout = Win32API.new('user32', 'SendMessageTimeout', 'LLLPLLP', 'L')
HWND_BROADCAST = 0xffff
WM_SETTINGCHANGE = 0x001A
SMTO_ABORTIFHUNG = 2
result = 0
SendMessageTimeout.call(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 'Environment', SMTO_ABORTIFHUNG, 5000, result)
Спасибо Александру Прокофьеву за ответ .
Также см. хорошее обсуждение в целом о переменных среды Windows, в том числе о том, как установить их для всего компьютера вместо всего текущего пользователя (в HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment )