windows – 通过Ruby持久化环境变量
发布时间:2020-12-13 23:14:29 所属栏目:Windows 来源:网络整理
导读:我试图在 Ruby中设置我的DOS环境变量,并在脚本退出后保持它.例如,如果我想要一个ruby脚本set_abc_env.rb将环境变量’ABC’设置为’blah’,我希望运行以下命令: C: echo %ABC%C: set_abc_env.rbC: echo %ABC% blah 我该怎么做呢? 您可以通过Ruby ENV对象访
我试图在
Ruby中设置我的DOS环境变量,并在脚本退出后保持它.例如,如果我想要一个ruby脚本set_abc_env.rb将环境变量’ABC’设置为’blah’,我希望运行以下命令:
C:> echo %ABC% C:> set_abc_env.rb C:> echo %ABC% blah 我该怎么做呢?
您可以通过Ruby ENV对象访问环境变量:
i = ENV['ABC']; # nil ENV['ABC'] = '123'; i = ENV['ABC']; # '123' 坏消息是,作为MSDN says,进程永远不能直接更改另一个进程的环境变量,而该进程不是该进程的子进程.因此,当脚本退出时,您将丢失它所做的所有更改. 好消息是Microsoft Windows在注册表中存储环境变量,并且可以将propagate环境变量存储到系统中.这是一种修改用户环境变量的方法: 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,'Environment',SMTO_ABORTIFHUNG,5000,result) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如何从Windows QML应用程序中删除边框
- windows-server-2008-r2 – 服务器08 RDP:如果已经连接了相
- windows-8 – 在启动时运行autostart_console.bat或在ConEm
- windows – 平移大型桌面的远程桌面客户端?
- 您可以向Windows资源管理器发送信号以刷新系统托盘图标吗?
- Windows Phone 7导航动画
- 为什么Microsoft重载方法Console.Write()和Console.WriteLi
- 最大化时Windows窗体中的东西移动 – C#
- 是默认情况下能够处理vista / win7 UAC的delphi 2010程序
- 重命名外部dll中的类,而不会在unityEditor中丢失对它的引用