Class: SleipnirAPI::Process

Inherits:
Object
  • Object
show all
Extended by:
Registry
Defined in:
lib/sleipnir_api/process.rb

Overview

:nodoc:

Constant Summary collapse

@@wbem =
nil

Class Method Summary collapse

Class Method Details

.create(timeout = 3) ⇒ Object



18
19
20
21
22
23
24
25
26
27
# File 'lib/sleipnir_api/process.rb', line 18

def create(timeout = 3)
  exe_path = local_server
  unless File.exist?(exe_path)
    raise_create_error "Sleipnir.exe not found `#{exe_path}'"
  end
  clazz = wbem.Get("Win32_Process")
  r = clazz.Create(exe_path, nil, nil, nil)
  raise_create_error "error=#{r}." unless r.zero?
  wait_for_launch(timeout)
end

.escape(str) ⇒ Object



53
54
55
# File 'lib/sleipnir_api/process.rb', line 53

def escape(str)
  str.gsub(/\\/){ "\\\\" }
end

.exist?Boolean

Returns:

  • (Boolean)


14
15
16
# File 'lib/sleipnir_api/process.rb', line 14

def exist?
  not query_sleipnir.Count.zero?
end

.query_sleipnirObject



49
50
51
# File 'lib/sleipnir_api/process.rb', line 49

def query_sleipnir
  wbem.ExecQuery("select * from Win32_Process where ExecutablePath='%s'" % escape(local_server))
end

.raise_create_error(msg) ⇒ Object

Raises:

  • (Sleipnir::ProcessError)


39
40
41
# File 'lib/sleipnir_api/process.rb', line 39

def raise_create_error(msg)
  raise Sleipnir::ProcessError, "Failed to create Sleipnir process: #{msg}."
end

.terminate!(handle) ⇒ Object



43
44
45
46
47
# File 'lib/sleipnir_api/process.rb', line 43

def terminate!(handle)
  query_sleipnir.each do |obj|
    obj.Terminate
  end
end

.wait_for_launch(timeout) ⇒ Object



29
30
31
32
33
34
35
36
37
# File 'lib/sleipnir_api/process.rb', line 29

def wait_for_launch(timeout)
  begin
    timeout(timeout) {
      sleep(0.1) until exist?
    }
  rescue Timeout::Error
    raise_create_error("timed out")
  end
end

.wbemObject



58
59
60
61
62
63
64
# File 'lib/sleipnir_api/process.rb', line 58

def wbem
  unless @@wbem
    locator = WIN32OLE.new("WbemScripting.SWbemLocator")
    @@wbem = locator.ConnectServer(".")
  end
  @@wbem
end