これについてはpast questionがあります。基本的な要点は、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コード:the answerのためのアレクサンダー・プロコフィエブへ
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環境変数のa good discussionを参照してください(ます。HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \コントロール\セッションマネージャ\環境での)
私はHKEY_CURRENT_USER上であっても、読み込みはできましたが、書き込みや作成はできませんでした。アクセスが拒否されました。 [添付されたペーストビン](http://pastebin.com/TSEKeqyb)は、ここに入れるのに少し時間がかかるので、エラーを示しています。私は鍵を読むことができた。アクセス許可のエラーを回避するか、昇格されたアクセス許可を使用して戻って戻ってきますか? – Pred