簡體   English   中英

使用Ruby永久(即在注冊表中)設置環境變量?

[英]Use Ruby to permanently (ie, in the registry) set environment variables?

在Windows上,如何使用Ruby永久設置環境變量? 我知道我需要更改注冊表(通過win32ole模塊?)但我是一個關於腳本注冊表的新手。

據我所知,我可以說ENV['FOO'] = "c:\\bar\\baz"為會話設置環境變量FOO 但是,我對全局和永久設置環境變量感興趣。

我找到了patheditor gem,它非常適合永久改變Windows PATH 但是我想設置其他環境變量,例如JAVA_HOME

有一個過去的問題 基本要點是通過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)

感謝Alexander Prokofyev 的回答

另外,請參閱有關Windows環境變量的一般討論 ,包括如何為整個計算機設置它們而不僅僅是當前用戶(在HKEY_LOCAL_MACHINE \\ SYSTEM \\ CurrentControlSet \\ Control \\ Session Manager \\ Environment中)

您正在尋找Win32 :: Registry:

http://www.ruby-doc.org/stdlib/libdoc/Win32API/rdoc/classes/Win32/Registry.html

作為參考,這是我如何找到它:

http://www.google.com/search?client=safari&rls=en-us&q=ruby+registry&ie=UTF-8&oe=UTF-8

無論如何,那么你會想做類似的事情:

registry.open("HKEY_WINDOWS_GUNK/path/to/your/key", Win32::Registry::KEY_WRITE) do |reg|
   reg[regentry, Win32::Registry::REG_DWORD]=value
end

如果密鑰尚不存在,則可能必須先創建密鑰。

我很高興看到這么全面的答案!

還應注意,在使用常量標志(如Win32 :: Registry :: KEY_WRITE和Win32 :: Registry)創建/寫入保留/系統鍵下的條目(例如64位Windows操作系統上的HKEY_LOCAL_MACHINE \\ SOFTWARE \\ Wow6432Node)時:: KEY_ALL_ACCESS將不會顯示所需的行為,除非MRI(Ruby解釋器)實例是從“管理員”內核上下文啟動的。 通過右鍵單擊可執行文件並選擇“以管理員身份運行”來啟動cmd.exe(Windows shell程序)允許此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM