class Chef::Provider::Env::Windows
Constants
- HWND_BROADCAST
see: msdn.microsoft.com/en-us/library/ms682653%28VS.85%29.aspx
- SMTO_ABORTIFHUNG
- SMTO_BLOCK
- SMTO_NOTIMEOUTIFNOTHUNG
- WM_SETTINGCHANGE
Public Instance Methods
broadcast_env_change()
click to toggle source
# File lib/chef/provider/env/windows.rb, line 70 def broadcast_env_change flags = SMTO_BLOCK | SMTO_ABORTIFHUNG | SMTO_NOTIMEOUTIFNOTHUNG SendMessageTimeoutA(HWND_BROADCAST, WM_SETTINGCHANGE, 0, FFI::MemoryPointer.from_string('Environment').address, flags, 5000, nil) end
create_env()
click to toggle source
# File lib/chef/provider/env/windows.rb, line 27 def create_env obj = env_obj(@new_resource.key_name) unless obj obj = WIN32OLE.connect("winmgmts://").get("Win32_Environment").spawninstance_ obj.name = @new_resource.key_name obj.username = "<System>" end obj.variablevalue = @new_resource.value obj.put_ ENV[@new_resource.key_name] = @new_resource.value broadcast_env_change end
delete_env()
click to toggle source
# File lib/chef/provider/env/windows.rb, line 40 def delete_env obj = env_obj(@new_resource.key_name) if obj obj.delete_ ENV.delete(@new_resource.key_name) broadcast_env_change end end
env_obj(key_name)
click to toggle source
# File lib/chef/provider/env/windows.rb, line 54 def env_obj(key_name) wmi = WmiLite::Wmi.new # Note that by design this query is case insensitive with regard to key_name environment_variables = wmi.query("select * from Win32_Environment where name = '#{key_name}'") if environment_variables && environment_variables.length > 0 environment_variables[0].wmi_ole_object end end
env_value(key_name)
click to toggle source
# File lib/chef/provider/env/windows.rb, line 49 def env_value(key_name) obj = env_obj(key_name) return obj ? obj.variablevalue : nil end