【问题标题】:How do I deal with cases when Process.Kill() yields "access denied" because the process is terminating?当 Process.Kill() 因为进程终止而产生“访问被拒绝”时,我该如何处理?
【发布时间】:2013-08-15 07:51:18
【问题描述】:

在我的代码中,当发生以下任一情况时,我需要调用Process.Kill()declared in MSDN 来抛出Win32Exception

  1. 无法终止关联的进程。
  2. 进程正在终止。
  3. 关联的进程是 Win16 可执行文件。

有时我确实面对Win32ExceptionAccess is denied 消息和NativeErrorCode 设置为5。MSDN 说当进程终止时调用Kill() 时会发生这种组合。其他两个案例没有详细记录。

所以我需要合理处理这种情况。当然我可以抓住Win32Exception,但我怎么知道它到底为什么被抛出?如果进程已经终止并且可能在所有其他情况下重新抛出异常,我不需要做任何事情。

我如何识别和处理这种特殊情况?

【问题讨论】:

  • 我能问一下你为什么需要打电话给Process.Kill吗?我假设你唯一调用它是因为程序导致了某种错误
  • @Sayse:我想确保进程在规定的时间内终止。
  • 您或用户是否开始关闭应用程序?如果它是以编程方式启动的杀死/关闭,您能否跟踪?
  • @Default:我不在乎它是否启动了 X/Y - 无论如何我都需要终止进程。终止 - 就是这样。
  • 从我读到的,看起来你的 try catch 是你最好的选择(你显然可以在这里使用 NativeErrorCode),还有 ExitCode 但这只是 -1 所以可能没有帮助

标签: c# .net process access-denied win32exception


【解决方案1】:

使用命令行 C# 终止任务,例如 Taskkill /F /IM ExeName.exe。 如果您没有杀死任务的权限,那么强制杀死也无济于事。

更多信息请查看http://www.c-sharpcorner.com/UploadFile/8ea152/kill-process-from-the-command-prompt-in-windows-8/

这里是一个如何在 C# 中运行命令行的示例 Run Command Prompt Commands

问候

【讨论】:

    【解决方案2】:

    使用 try-catch。如果您问我,这是 .NET 框架中的设计错误。

    或者,使用 PInvoke 调用TerminateProcess

    【讨论】:

      猜你喜欢
      • 2013-08-10
      • 1970-01-01
      • 2011-02-21
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      相关资源
      最近更新 更多