如何按名称扫描和终止进程

Rev*_*ion 2 c#

我想创建一个程序,它将按名称扫描并终止进程.我找到了这个:

foreach (Process process in Process.GetProcessesByName("vlc"))
{
    process.Kill();
    process.WaitForExit();
}
Run Code Online (Sandbox Code Playgroud)

问题是,这只会杀死一次并关闭.我想要的是程序如果再次启动则继续并再次终止该进程.有任何想法吗?

Zeg*_*gar 5

我想你可以使用这样的解决方案:

private ManagementEventWatcher WatchForProcessStart(string processName)
{
    string queryString =
        "SELECT TargetInstance" +
        "  FROM __InstanceCreationEvent " +
        "WITHIN  10 " +
        " WHERE TargetInstance ISA 'Win32_Process' " +
        "   AND TargetInstance.Name = '" + processName + "'";

    // The dot in the scope means use the current machine
    string scope = @"\\.\root\CIMV2";

    // Create a watcher and listen for events
    ManagementEventWatcher watcher = new ManagementEventWatcher(scope, queryString);
    watcher.EventArrived += ProcessStarted;
    watcher.Start();
    return watcher;
}
Run Code Online (Sandbox Code Playgroud)

然后在新进程启动时:

private void ProcessStarted(object sender, EventArrivedEventArgs e)
{
  //Here kill the process.
}
Run Code Online (Sandbox Code Playgroud)

但所有这一切都是一个非常奇怪的概念,每次启动时都会杀死进程.我宁愿试图找出防止启动的方法,但我当然不知道商业案例.

您可以在此处找到有关ManagementEventWatcher类的更多信息.