4

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

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

Windows を永続的に変更するのに最適な patheditor gem を見つけましたPATH。しかし、たとえばJAVA_HOME.

4

3 に答える 3

8

これについては過去の質問があります。基本的な要点は、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)

答えてくれたAlexanderProkofyevに感謝します。

また、マシン全体と現在のユーザーのみ(HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment)で変数を設定する方法など、Windows環境変数全般に関する適切な説明も参照してください。

于 2009-05-28T03:19:14.283 に答える
1

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

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

于 2009-05-26T22:05:20.187 に答える
0

このような包括的な回答のセットを見てうれしく思います。

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

于 2016-09-21T14:06:49.540 に答える