C# 在进程进入内存之前杀死它

C# 在进程进入内存之前杀死它,c#,process,system.diagnostics,diagnostics,C#,Process,System.diagnostics,Diagnostics,我使用这段代码来检测是否检测到进程。我使用kill()来摆脱它。我本来想挂起它,然后用它做一些处理,这将决定是否允许进程运行,但显然我无法完成,因为它会创建进程并在之后杀死它。这是密码 var query = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 0, 0, 1), "TargetInstance isa \"Win32_Process\""); using (var watcher =

我使用这段代码来检测是否检测到进程。我使用kill()来摆脱它。我本来想挂起它,然后用它做一些处理,这将决定是否允许进程运行,但显然我无法完成,因为它会创建进程并在之后杀死它。这是密码

var query = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 0, 0, 1),
    "TargetInstance isa \"Win32_Process\"");
      using (var watcher = new ManagementEventWatcher(query))
      {
          ManagementBaseObject mo = watcher.WaitForNextEvent();
          ManagementBaseObject o = (ManagementBaseObject)mo["TargetInstance"];
          String str = "";
          foreach (PropertyData s in o.Properties)
          {
              if(s.Name.equals("ProcessId"))
                {
                Process p = Process.GetProcessById(Int32.Parse(s.Value));
                p.Kill();
                }
          }
      }

这里的问题是,当我运行它,然后在运行对话框中键入cmd.exe时,它会出现一秒钟,然后消失。它甚至一秒钟都不应该出现。我想在进程创建窗口(即加载到内存)之前捕获它。有人能建议我如何实现这一点吗?

您过去可以通过设置ShellExecuteHook在注册表中实现这一点,但在Vista以后的版本中,此功能默认关闭。我想有可能再次打开它。。。否则,这篇文章()似乎提供了另一种选择,但我不知道有什么托管解决方案。谢谢你的回复。我已经成功地通过了我的项目,过程的闪烁出现了一秒钟。我的教授甚至没有注意到。但我感谢你的评论,因为它正好解决了我的问题。谢谢