2009-05-26 12 views
4

Windowsでは、Rubyを使用して環境変数を永続的に設定するにはどうすればよいですか?私はレジストリを変更する必要があることを知っています(win32oleモジュールを介して?)が、私はレジストリのスクリプトについての初心者です。Rubyを使用して環境変数を永続的に(つまりレジストリ内に)設定しますか?

セッションの環境変数FOOを設定するには、ENV['FOO'] = "c:\bar\baz"と言うことができます。しかし、私は環境変数をグローバルかつ永続的に設定することに興味を持っています。

私は、Windows PATHを恒久的に変更するのに効果的なパーチェーター宝石を見つけました。しかし、私は他の環境変数、例えばJAVA_HOMEを設定したいと思います。あなたは、Win32を探している

答えて

8

これについては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 \コントロール\セッションマネージャ\環境での)

+0

私はHKEY_CURRENT_USER上であっても、読み込みはできましたが、書き込みや作成はできませんでした。アクセスが拒否されました。 [添付されたペーストビン](http://pastebin.com/TSEKeqyb)は、ここに入れるのに少し時間がかかるので、エラーを示しています。私は鍵を読むことができた。アクセス許可のエラーを回避するか、昇格されたアクセス許可を使用して戻って戻ってきますか? – Pred

1

::レジストリ:参考

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

とにかく、あなたが何かをしたいと思うでしょうlike:

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

鍵が存在しない場合は、最初に鍵を作成する必要があります。

0

私はそのような包括的な答えを見て喜んで!

Win32 :: Registry :: KEY_WRITEなどの定数フラグを使用して、予約済み/システムキー(64ビットWindowsオペレーティングシステムのHKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Nodeなど)のエントリを作成または書き出す場合は、 Win32 :: Registry :: KEY_ALL_ACCESSは、MRI(Rubyインタプリタ)インスタンスが "Administrator"カーネルコンテキストから起動されない限り、望ましい動作をしません。実行可能ファイルを右クリックして「管理者として実行」を選択すると、cmd.exe(Windowsシェルプログラム)が起動します。

関連する問題