Vous pouvez accéder à des variables d'environnement via l'objet Ruby ENV:
i = ENV['ABC']; # nil
ENV['ABC'] = '123';
i = ENV['ABC']; # '123'
nouvelles Bad est, comme MSDN says, un processus ne peut pas changer directement les variables d'environnement d'un autre processus qui n'est pas un enfant de ce processus. Ainsi, lorsque le script se termine, vous perdez tous les changements qu'il a faits.
Bonne nouvelle est ce que Microsoft Windows stocke les variables d'environnement dans le registre et il est possible de propagate variables d'environnement sur le système. Ceci est une façon de modifier les variables d'environnement utilisateur:
require 'win32/registry.rb'
Win32::Registry::HKEY_CURRENT_USER.open('Environment', Win32::Registry::KEY_WRITE) do |reg|
reg['ABC'] = '123'
end
La documentation indique également que vous devez vous déconnecter et vous reconnecter ou diffuser un message WM_SETTINGCHANGE pour apporter des changements observés aux applications. Voici comment la diffusion peut se faire en Ruby:
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)