Как использовать WMI для обнаружения имени файла (.bat)? - PullRequest
2 голосов
/ 07 января 2010

В настоящее время с WMI Win32_Process, Кажется, я не могу определить, запущен ли в данный момент пакетный файл

все, что он перечисляет - это CommandLine из cmd.exe, не сообщая мне, какой пакетный файл запускается конкретным cmd.exe У кого-нибудь есть идеи?

фрагмент кода (ruby-wmi)

many_args = 'batch_file.bat'
procs = WMI::Win32_Process.find(:all)
procs.each{|proc|
  if (proc.CommandLine.contain?(many_args)) || proc.Name.include?(many_args) # never succeeds

      ...

   end

  }

1 Ответ

2 голосов
/ 07 января 2010
require 'win32ole'

many_args = "test.cmd"

wmi = WIN32OLE.connect("winmgmts://")

processes = wmi.ExecQuery("select * from win32_process")

processes.each do |process|
  if process.CommandLine != nil && process.CommandLine.include?(many_args) then
    puts process.inspect
    puts "Name: #{process.Name}"
    puts "CommandLine: #{process.CommandLine}"
    puts "CreationDate: #{process.CreationDate}"
    puts "WorkingSetSize: #{process.WorkingSetSize}"
  end
end

подробнее по этой ссылке: http://rubyonwindows.blogspot.com/2007/07/using-ruby-wmi-to-get-win32-process.html

Ниже приведен мой вывод во время работы test.cmd:

#<WIN32OLE:0x2b8f360>
Name: cmd.exe
CommandLine: cmd /c ""C:\wmi test\test.cmd" "
CreationDate: 20100108083948.497052-300
WorkingSetSize: 1593344
...