Class: SleipnirAPI::Process
- Inherits:
-
Object
- Object
- SleipnirAPI::Process
- Extended by:
- Registry
- Defined in:
- lib/sleipnir_api/process.rb
Overview
:nodoc:
Constant Summary collapse
- @@wbem =
nil
Class Method Summary collapse
- .create(timeout = 3) ⇒ Object
- .escape(str) ⇒ Object
- .exist? ⇒ Boolean
- .query_sleipnir ⇒ Object
- .raise_create_error(msg) ⇒ Object
- .terminate!(handle) ⇒ Object
- .wait_for_launch(timeout) ⇒ Object
- .wbem ⇒ Object
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
14 15 16 |
# File 'lib/sleipnir_api/process.rb', line 14 def exist? not query_sleipnir.Count.zero? end |
.query_sleipnir ⇒ Object
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
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 |
.wbem ⇒ Object
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 |