WIN32OLE.connect(“winmgmts://”)返回JRily的nil

时间:2014-08-01 22:35:31

标签: ruby windows jruby win32ole jruby-win32ole

我正在尝试检查Windows 7计算机上的JRuby中是否存在进程。 我在尝试:

require 'jwin32ole'
wmi = WIN32OLE.connect("winmgmts://")
processes = wmi.ExecQuery("select * from win32_process")

但是,WIN32OLE.connect("winmgmts://")正在返回nil。

当我启动Excel时,我能够成功调用WIN32OLE.connect("Excel.Application"),因此WIN32OLE.connect可以正常工作。

有关如何使其正常工作的任何建议,或其他检查流程是否存在的方法?

1 个答案:

答案 0 :(得分:0)

我发现了看起来像什么问题。

在jwin32ole中,这是connect的代码:

def self.connect app
  dispatcher=Java::com.jacob.activeX.ActiveXComponent.connectToActiveInstance(app)
  if dispatcher.class.to_s != "NilClass"
    AppDispatcher.new dispatcher
  else
    return nil

看着the API documentation for jacob.activeXComponent.connectToActiveInstance

对于任何带有“:”的编程

,这将失败

当然,在尝试连接到“winmgmts:”时会导致失败。为什么它不接受冒号而没有解释。

jacob.activeXComponent中的另一个连接方法必须直接使用,这对prog id中的冒号没有问题。