I want to kill a process with vbs, i know the command is :
oShell.Run "taskkill /im software.exe", , True how to get software.exe path before we kill it ?
Because i want to launch software.exe again.
WMI (can teminate as well):
dim wmi, list, process, path, shell set wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") set list = wmi.ExecQuery("Select * from Win32_Process") '// or "Select * from Win32_Process where name = 'xxxxxxx.exe'" allowing the removal of the if block for each process in list if (lcase(process.name) = "xxxxxxx.exe") then path = process.ExecutablePath process.terminate() exit for end if next wscript.echo path set shell = CreateObject("WScript.Shell") shell.Run Chr(34) & path & Chr(34) Give a try for this vbscript :
Option Explicit Dim Titre,Copyright,fso,ws,NomFichierLog,temp,PathNomFichierLog,OutPut,Count,strComputer If AppPrevInstance() Then MsgBox "Il y a une instance déjà en cours" & VbCrLF & CommandLineLike(WScript.ScriptName),VbExclamation,"Il y a une instance déjà en cours" WScript.Quit Else Copyright = "[© Hackoo © 2015 ]" Set fso = CreateObject("Scripting.FileSystemObject") Set ws = CreateObject( "Wscript.Shell" ) NomFichierLog="Killed Process.txt" temp = ws.ExpandEnvironmentStrings("%temp%") PathNomFichierLog = temp & "\" & NomFichierLog Set OutPut = fso.CreateTextFile(temp & "\" & NomFichierLog,1) strComputer = "." Call Find("wscript.exe") Call Explorer(PathNomFichierLog) End If '*************************************************************************************************** Function Explorer(File) Dim ws Set ws = CreateObject("wscript.shell") ws.run "Explorer "& File & "\",1,True end Function '*************************************************************************************************** Sub Find(MyProcess) Dim colItems,objItem,Processus,Question Titre = " Processus "& DblQuote(MyProcess) &" en cours d'exécution " Set colItems = GetObject("winmgmts:").ExecQuery("Select * from Win32_Process " _ & "Where Name like '%"& MyProcess &"%' AND NOT commandline like " & CommandLineLike(WScript.ScriptFullName) & "",,48) Count = 0 For Each objItem in colItems Count= Count + 1 'Processus = Mid(objItem.CommandLine,InStr(objItem.CommandLine,""" """) + 2) 'Extraction du chemin du script en ligne de commande Processus = objItem.CommandLine 'Replace(Processus,chr(34),"") Question = MsgBox ("Voulez-vous arrêter ce script : " & DblQuote(Processus) & " ?" ,VBYesNO+VbQuestion,Titre+Copyright) If Question = VbYes then objItem.Terminate(0)'Tuer ce processus OutPut.WriteLine Processus else Count= Count - 1 'décrementer le compteur de -1 End if Next OutPut.WriteLine String(100,"*") OutPut.WriteLine count & Titre & "ont été arrêtés" OutPut.WriteLine String(100,"*") & VbCrLF End Sub '************************************************************************** Function DblQuote(Str) DblQuote = Chr(34) & Str & Chr(34) End Function '************************************************************************** Function AppPrevInstance() With GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") With .ExecQuery("SELECT * FROM Win32_Process WHERE CommandLine LIKE " & CommandLineLike(WScript.ScriptFullName) & _ " AND CommandLine LIKE '%WScript%' OR CommandLine LIKE '%cscript%'") AppPrevInstance = (.Count > 1) End With End With End Function '************************************************************************** Sub Pause(Minutes) Wscript.Sleep(Minutes*1000*60) End Sub '************************************************************************** Function StripProcPath(ProcessPath) Dim arrStr : arrStr = Split(ProcessPath, "\") StripProcPath = arrStr(UBound(arrStr)) End Function '************************************************************************** Function CommandLineLike(ProcessPath) ProcessPath = Replace(ProcessPath, "\", "\\") CommandLineLike = "'%" & ProcessPath & "%'" End Function '************************************************************************** Or this :
Option Explicit Dim Ws,fso,LogFile,Command,Execution Set Ws = CreateObject("Wscript.Shell") Set fso = CreateObject("Scripting.FileSystemObject") LogFile = Left(Wscript.ScriptFullName,InstrRev(Wscript.ScriptFullName, ".")) & "log" Call Kill("calc.exe") ws.run LogFile '**************************************************************************************************** Sub Kill(Process) Command = "Taskkill /F /IM "&Process&" > LogTmp.txt & Cmd /U /C Type LogTmp.txt > "&LogFile&" & Del LogTmp.txt" Call Executer(Command,0) End Sub '**************************************************************************************************** Function Executer(StrCmd,Console) Dim ws,MyCmd,Resultat Set ws = CreateObject("wscript.Shell") 'La valeur 0 pour cacher la console MS-DOS If Console = 0 Then MyCmd = "CMD /C " & StrCmd & "" Resultat = ws.run(MyCmd,Console,True) If Resultat = 0 Then Else MsgBox "Une erreur inconnue est survenue !",16,"Une erreur inconnue est survenue !" End If End If 'La valeur 1 pour montrer la console MS-DOS If Console = 1 Then MyCmd = "CMD /K " & StrCmd & "" Resultat = ws.run(MyCmd,Console,False) If Resultat = 0 Then Else MsgBox "Une erreur inconnue est survenue !",16,"Une erreur inconnue est survenue !" End If End If Executer = Resultat End Function '**************************************************************************************************** Function DblQuote(Str) DblQuote = Chr(34) & Str & Chr(34) End Function '**************************************************************************************************** To restart application with VBScript (close and open again)
and get application Path with more accuracy use CommandLine properties for Win32_Process.
and if you don't remember or know exactly application name in task manager use InStr.
'open google chrome explorer before you run this script On Error Resume next Dim processes, process, aPath, sh Set processes=GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * from Win32_Process") For Each process In processes If (InStr(1,process.CommandLine,"chrom",1)) > 0 Then ' "chrom" some letter form "chrome.exe" aPath = process.CommandLine process.Terminate() Exit For End If Next Set sh = CreateObject("WScript.Shell") sh.Popup "App Path : "&aPath,2,"hello" sh.exec aPath You can remove "chrom" and add any application name or some letter from its name to close it and reopen again.
This few code can do magic if you want to close and reopen specific instance from multi-instance open
For example you have multi text file open with notepad.exe and you want to close and reopen only one specific text and leave other open just remove "chrom" and add the name of this text you like to close and reopen again.
Same for multi script run with wscript.exe and you want close specific one script not all of them and reopen you can do the same type the name of this script instead of "chrom"