我想创建一个程序,它将按名称扫描并终止进程.我找到了这个:
foreach (Process process in Process.GetProcessesByName("vlc"))
{
process.Kill();
process.WaitForExit();
}
Run Code Online (Sandbox Code Playgroud)
问题是,这只会杀死一次并关闭.我想要的是程序如果再次启动则继续并再次终止该进程.有任何想法吗?
我想你可以使用这样的解决方案:
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类的更多信息.