2016-11-13 2 views
0

Я пытаюсь выяснить, как убить два процесса одновременно, и мне удалось заставить его работать, когда он открывается, а другой не будет закрыт.Убивание двух разных процессов с помощью VB

Sub block() 
    For Each item As Process In Process.GetProcesses 
     If item.ProcessName = "taskmgr" And item.ProcessName = "cmd" Then 
      item.Kill() 
     End If 
    Next 
End Sub 
+1

Ваша логика является ошибкой. Если имя процесса - taskmgr AND cmd. Это никогда не будет правдой. И exe является частью имени. –

+1

'If item.ProcessName =" taskmgr "ORElse item.ProcessName =" cmd "', который будет работать. Условие не может быть для обоих, оно одно или другое ... – Codexer

+0

Другой вариант - создать наблюдателя 'System.Management.ManagementEventWatcher', который помешал бы им даже начать, а не проверять их ... – Codexer

ответ

2

Как отмечено @Noodles и @Zaggler, ваша логика неверна на этой линии;

If item.ProcessName = "taskmgr" And item.ProcessName = "cmd" Then 

Эта строка, по сути, запрашивает, является ли имя процесса «taskmgr», и если одно и то же имя процесса «cmd». Поскольку эти две строки не являются одинаковыми «taskmgr»/= «cmd», это условие if никогда не будет истинным. Я предлагаю вам сделать что-то подобное;

Sub block() 
    For Each item As Process In Process.GetProcesses 
    If item.ProcessName = "taskmgr" Then 
     item.Kill() 
    ElseIf item.ProcessName = "cmd" Then 
     item.Kill() 
    End If 
    Next 
End Sub 

Или, если вы планируете закрыть многие процессы;

+0

Кто бы ни был оставил случайный downvote - пожалуйста, дайте мне некоторую обратную связь, чтобы я мог улучшить то, что проблема была, спасибо! – FraserOfSmeg

+0

Скорее поздний ответ ... Я не использовал этот нижний предел, но я думаю, что это может быть связано с тем, что вы создали целое выражение 'ElseIf', а не просто переключили' And' на 'OrElse'. –

1

Дайте попробовать с этим решением в VBScript:

Option Explicit 
Dim Ws,fso,MainArray,LogFile,i,OutPut,count 
Set Ws = CreateObject("Wscript.Shell") 
Set fso = CreateObject("Scripting.FileSystemObject") 
MainArray = Array("taskmgr.exe","cmd.exe") 
LogFile = Left(Wscript.ScriptFullName,InstrRev(Wscript.ScriptFullName, ".")) & "log" 
count = 0 
If fso.FileExists(LogFile) Then fso.DeleteFile LogFile 
Set OutPut = fso.OpenTextFile(LogFile,2,True) 
For i = LBound(MainArray) To UBound(MainArray) 
    Call Kill(MainArray(i)) 
Next 
OutPut.WriteLine String(50,"*") 
OutPut.WriteLine count & " Process were killed !" 
OutPut.WriteLine String(50,"*") 
If fso.FileExists(LogFile) Then 
    ws.run DblQuote(LogFile) 'To show the LogFile 
End if 
'****************************************** 
Sub Kill(MyProcess) 
    Dim colItems,objItem 
    Set colItems = GetObject("winmgmts:").ExecQuery("Select * from Win32_Process " _ 
    & "Where Name like '%"& MyProcess &"%' AND NOT commandline like '%" & wsh.scriptname & "%'",,48) 
    For Each objItem in colItems 
     count= count + 1 
     OutPut.WriteLine Mid(objItem.CommandLine,InStr(objItem.CommandLine,""" """) + 2) 
     objItem.Terminate(0) 
    Next 
End Sub 
'*********************************************** 
Function DblQuote(Str) 
    DblQuote = Chr(34) & Str & Chr(34) 
End Function 
'*********************************************** 
+1

Это чрезмерное убийство, чтобы убить процесс, а введение сценария VB - это не то, с чем работает OP, и его просили. Хотя альтернатива. Не могли бы вы объяснить, что делает сценарий, другие понимают, что он делает, поскольку нет никаких подробностей об этом? – Codexer

Смежные вопросы