C# Kill进程和父进程打开的每个子进程(如'TaskKill/F/T'命令)

C# Kill进程和父进程打开的每个子进程(如'TaskKill/F/T'命令),c#,.net,vb.net,process,child-process,C#,.net,Vb.net,Process,Child Process,我有一个SFX WinRAR Autoxtrable文件,它使用notepad.exe进程运行一个文本文件,SFX文件等待接收notepad.exe的exitcode以完成SFX执行 我想做一个treekill,杀死SFX文件打开的所有进程,或者换句话说,我想在.NET中复制这个批处理命令: /t:指定终止所有子进程以及 父进程,通常称为树终止 要终止进程,请在VBNET中执行以下操作: ' '终止指定进程名称的进程。 ' Private Sub Kill_ProcessByVal Proc

我有一个SFX WinRAR Autoxtrable文件,它使用notepad.exe进程运行一个文本文件,SFX文件等待接收notepad.exe的exitcode以完成SFX执行

我想做一个treekill,杀死SFX文件打开的所有进程,或者换句话说,我想在.NET中复制这个批处理命令:

/t:指定终止所有子进程以及 父进程,通常称为树终止

要终止进程,请在VBNET中执行以下操作:

' '终止指定进程名称的进程。 ' Private Sub Kill_ProcessByVal ProcessName作为字符串, 可选的ByVal递归为Boolean=True ProcessName=IfProcessName.EndsWith.exe,StringComparison.InvariantCultureIgnoreCase, ProcessName.Substring0,ProcessName.LastIndexOf。, 进程名 对于Process.GetProcessByNameProcessName中的每个p As进程 p、 杀死 如果不是递归的,则退出 下一个p 端接头 现在,在C或VBNET中,我如何识别SFX打开的子进程以同时杀死它们?

一些想法:

WinAPI和WMI WinAPI 堆栈溢出-WMI
正在使用的两种方法是ManagementObjectSearcherWMI和WinAPI。

我只想分享我对这个C解决方案所做的VBNET修改

' '杀死一个进程和/或它的所有子进程。 ' ' '指示要终止的进程的名称。 ' ' '表示是否应终止父进程的子进程。 ' ' '如果设置为False,则仅终止使用给定进程名称找到的第一个进程, '否则,将杀死找到的具有相同进程名称的每个进程 '此选项适用于多实例进程。 ' Private Sub Kill_ProcessByVal ProcessName作为字符串, 可选的ByVal killchildprocesss为Boolean=False, 可选的ByVal RecursiveKill作为布尔值=True '正确设置给定的进程名称 ProcessName=IfProcessName.EndsWith.exe,StringComparison.InvariantCultureIgnoreCase, ProcessName.Substring0,ProcessName.LastIndexOf。, 进程名 对于Process.GetProcessByNameProcessName中的每个p As进程 选择案例和流程 Case False“仅终止此进程”。 p、 杀死 Case True“杀死此进程及其子进程。 作为管理对象的每个生产任务 在新的ManagementObjectSearcherSelect*From Win32_进程中,其中ParentProcessID=&Convert.toString.Id.[Get] Kill_ProcessmoName,True,递归Kill 下个月 p、 杀死 结束选择 '不要继续搜索同名进程。 如果不是RecursiveKill,则退出Sub 下一个p 端接头
比如?@neolik非常感谢您提供的信息,sub需要一个pid,我正在尝试修改它以期望一个进程名,我想我可以自己做,而无需帮助,也许代码救了我的命,再次感谢您应该能够调整WMI查询以按进程名过滤。它工作得很好,谢谢。我很高兴您能够解决它顺便说一句,为您的代码编写XML注释竖起大拇指。不过,我更喜欢对参数进行简短的解释。适合一行打印的东西,通常是100-120个字符。在备注中包括其余部分。
Taskkill /F /T /IM "SFX file.exe"