In need of help. Win32Ole objWMIService.Create?


#1

objWMIService.Create takes a parameter which is set to the pid of a
given process…

IE:

------start_process.vbs-----
strComputer = “.”
Set objWMIService = GetObject(“winmgmts:\.\root\cimv2:Win32_Process”)
Error = objWMIService.Create(“cmd /c exit 10”, null, null, pid)
Wscript.Echo pid
------/start_process.vbs-----

While trying to incorporate this within ruby, I ended up with
something of the like:

------start_process.rb---------
require ‘win32ole’
pid = nil
objWMIService =
WIN32OLE.connect(“winmgmts:\\.\root\cimv2:Win32_Process”)
error = objWMIService.Create(“notepad”, nil, nil, pid)
puts pid # nil
------/start_process.rb---------

How can I set a variable equal to the pid value just as the vb script
does?

I did find an object in ObjectSpace that has the “notepad” command and
displays the PID:

ObjectSpace.each_object(Array) { |x|
p x if x[0] == “notepad”
}

[“notepad”, nil, nil, nil]
[“notepad”, -2147352572, -2147352572, 268]
=> 1363
irb(main):008:0>

Any ideas?


#2

Hi,

x1 asked:

objWMIService.Create takes a parameter which is set to the pid of a
given process…

How can I set a variable equal to the pid value just as the vb script
does?

I did find an object in ObjectSpace that has the “notepad” command and
displays the PID:

The _invoke method takes an array of values and an array of types. Your
interesting ObjectSpace array looks like the array of values you might
get
back if you gave _invoke the dispid of the method,
[“notepad”,nil,nil,nil],
and the types. But you can’t reflect on Create or other Win32_Process
methods to get that dispid or those types.

This is only a partial answer, but for some situations, the win32-utils
project and win32-process in particular may prove an adequate
replacement
for this function. win32-process provides Process.create which wraps
Win32’s
CreateProcess() and returns a PID. It gives you fork (more or less),
wait
and kill as well.

Cheers,
Dave