Killing Win32 process

A

Anukul Singhal

Hi,

I tried the following code snippet to kill a Win32 process:

def killQTP
wmi = WIN32OLE.connect("winmgmts://")
processes = wmi.ExecQuery("select * from Win32_process")
for process in processes do
if process.Name.include? "QTPro.exe" then
puts "Name: #{process.Name}"
puts "Process ID: #{process.Pid}"
puts process.Terminate
elsif process.Name.include? "star.exe" then
puts "Name: #{process.Name}"
puts "Process ID: #{process.Pid}"
puts process.Terminate
end
end
puts "done killing QTP"
end

But the process is not getting killed when I execute the above and
simply gives "exit code: 0"

Can anyone help in case I am missing anything to execute the above code
or is there any other way of killing a Win32 process?

Thanks,
Anukul
 
D

David Mullet

Anukul said:
Hi,

I tried the following code snippet to kill a Win32 process:

def killQTP
wmi = WIN32OLE.connect("winmgmts://")
processes = wmi.ExecQuery("select * from Win32_process")
for process in processes do
if process.Name.include? "QTPro.exe" then
puts "Name: #{process.Name}"
puts "Process ID: #{process.Pid}"
puts process.Terminate
elsif process.Name.include? "star.exe" then
puts "Name: #{process.Name}"
puts "Process ID: #{process.Pid}"
puts process.Terminate
end
end
puts "done killing QTP"
end

But the process is not getting killed when I execute the above and
simply gives "exit code: 0"

Can anyone help in case I am missing anything to execute the above code
or is there any other way of killing a Win32 process?

Thanks,
Anukul

Change

if process.Name.include? "QTPro.exe" then

to

if process.Name.downcase.include? "qtpro.exe" then

and change

process.Pid

to

process.ProcessId

FYI, This code will output a list of properties for a given process, and
their values:

for property in process.Properties_ do
puts property.Name + ': ' + property.Value.to_s
end

Hope that helps.

David
http://rubyonwindows.blogspot.com
 
M

Marc Heiler

Are you guys sure that anything

object.Upcased.Name

will work, rather than

object.upcased.name

?
 
G

Gordon Thiesfeld

Hi,

I tried the following code snippet to kill a Win32 process:

def killQTP
wmi = WIN32OLE.connect("winmgmts://")
processes = wmi.ExecQuery("select * from Win32_process")
for process in processes do
if process.Name.include? "QTPro.exe" then
puts "Name: #{process.Name}"
puts "Process ID: #{process.Pid}"
puts process.Terminate
elsif process.Name.include? "star.exe" then
puts "Name: #{process.Name}"
puts "Process ID: #{process.Pid}"
puts process.Terminate
end
end
puts "done killing QTP"
end

But the process is not getting killed when I execute the above and
simply gives "exit code: 0"

Can anyone help in case I am missing anything to execute the above code
or is there any other way of killing a Win32 process?

You might look at win32-process, but if you want to use WMI, remember
WMI queries are basically just SQL.

# this code

require 'win32ole'

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

# I only mixed case to illustrate that case is not important
query = "select * from Win32_process where name='NoTePaD.exe' OR
name='cAlC.exe'"

processes = wmi.ExecQuery(query)

processes.each do |process|
puts "Name: #{process.Name}"
puts "Process ID: #{process.ProcessID}"
puts process.Terminate
end

puts "done killing things"


# returns

Name: notepad.exe
Process ID: 3564
0
Name: calc.exe
Process ID: 5712
0
done killing things
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,075
Latest member
MakersCBDBloodSupport

Latest Threads

Top