Vbscript 使用VBS获取进程路径

Vbscript 使用VBS获取进程路径,vbscript,process,Vbscript,Process,我想用vbs终止进程,我知道命令是: oShell.Run "taskkill /im software.exe", , True 如何在我们杀死它之前获取software.exe路径 因为我想再次启动software.exe。(也可以终止): 请尝试使用此vbscript: Option Explicit Dim Titre,Copyright,fso,ws,NomFichierLog,temp,PathNomFichierLog,OutPut,Count,strComputer If Ap

我想用vbs终止进程,我知道命令是:

oShell.Run "taskkill /im software.exe", , True
如何在我们杀死它之前获取software.exe路径

因为我想再次启动software.exe。

(也可以终止):


请尝试使用此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
'**************************************************************************
或者这个:

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
'****************************************************************************************************

使用VBScript重新启动应用程序(关闭并再次打开)

并更准确地获取应用程序路径使用
命令行
Win32\u进程的属性

'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,"In_The_Name_Of_Allah"
    sh.exec aPath
如果您不记得或不知道任务管理器中的应用程序名称,请使用
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,"In_The_Name_Of_Allah"
    sh.exec aPath
您可以删除“chrom”,并添加任何应用程序名称或其名称中的某个字母,以将其关闭并重新打开

如果您想从“多实例打开”中关闭并重新打开特定实例,这几段代码可以发挥神奇的作用

例如,您使用notepad.exe打开了多个文本文件,您只想关闭并重新打开一个特定文本,而不想打开另一个文本,只需删除
“chrom”
,然后添加要关闭并重新打开的文本的名称。

对于使用wscript.exe运行的多脚本也是如此,您希望关闭特定的一个脚本,而不是全部脚本,然后重新打开。您可以执行相同的操作,键入此脚本的名称,而不是键入“chrom”

好的,谢谢。我只需添加:Set oShell=wscript.CreateObject(“wscript.Shell”)