2010-01-07 4 views
2

actuellement avec Win32_Process WMI, je semble incapable de détecter si un fichier de commandes est en cours d'exécutioncomment utiliser WMI pour découvrir un fichier batch (.bat) en cours d'exécution?

tout ce qu'il énumère est LigneCommande de cmd.exe, sans me dire quel fichier batch qui cmd.exe particulier est en cours d'exécution. Quelqu'un at-il des idées là-bas?

extrait de code (rubis 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 

    } 

Répondre

2
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 

voir plus sur ce lien: http://rubyonwindows.blogspot.com/2007/07/using-ruby-wmi-to-get-win32-process.html

Ce qui suit est ma sortie alors que le test.cmd est en cours d'exécution:

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

J'aime vraiment le code - cela fonctionne pour vous sur votre boîte si vous avez test.cmd en cours d'exécution dans anot sa fenêtre ex: contenu bash -c 'sommeil 1000' ou quoi pas? -r – rogerdpack

+0

tout ce que j'ai fait était de faire test.cmd avec pause comme seule commande. Cela a fonctionné pour moi sur ma machine. Windows XP - ruby ​​1.8.6. Ça ne marche pas pour toi? – Beanish

+0

Intéressant. Cela fonctionne pour .cmd mais pas pour .bat [?] Doux - au moins j'ai un travail autour de nommer tous mes fichiers .bat. Cmd :) -r – rogerdpack

Questions connexes