Forum: Ruby In need of help. Win32Ole objWMIService.Create?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Vrtwo L. (Guest)
on 2005-12-07 05:08
(Received via mailing list)
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?
dave (Guest)
on 2005-12-07 17:18
(Received via mailing list)
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
This topic is locked and can not be replied to.