当前位置:  开发笔记 > 后端 > 正文

通过Ruby持久化环境变量

如何解决《通过Ruby持久化环境变量》经验,为你挑选了1个好方法。

我试图在Ruby中设置我的DOS环境变量,并在脚本退出后保持它.例如,如果我想要一个ruby脚本set_abc_env.rb将环境变量'ABC'设置为'blah',我希望运行以下命令:

C:> echo %ABC%
C:> set_abc_env.rb
C:> echo %ABC% blah

我该怎么做呢?



1> Alexander Pr..:

您可以通过Ruby ENV对象访问环境变量:

i = ENV['ABC']; # nil
ENV['ABC'] = '123';
i = ENV['ABC']; # '123'

坏消息是,正如MSDN 所说,一个进程永远不能直接改变另一个进程的环境变量,而这个进程不是该进程的子进程.因此,当脚本退出时,您将丢失它所做的所有更改.

好消息是Microsoft Windows在注册表中存储环境变量,并且可以将环境变量传播到系统.这是一种修改用户环境变量的方法:

require 'win32/registry.rb'

Win32::Registry::HKEY_CURRENT_USER.open('Environment', Win32::Registry::KEY_WRITE) do |reg|
  reg['ABC'] = '123'
end

该文档还说明您应该注销并重新登录或广播WM_SETTINGCHANGE消息,以便对应用程序进行更改.这就是如何在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)  

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有