Process.Kill抛出Win32Exception(访问被拒绝)

时间:2015-03-16 18:38:21

标签: c# .net process pinvoke kill-process

我有以下代码:

foreach (var process in Process.GetProcessesByName(name))
{
    try
    {
        process.Kill();
        if (!process.WaitForExit(timeout))
        {
            session.Log("Killing process {0} timed out.", name);
        }
        else
        {
            session.Log("Killing process {0} finished successfully.", name);
        }
    }
    catch (Exception exception)
    {
        session.Log("Exception while trying to kill process {0}: {1}", name, exception.ToString());
    }
}

Process.Kill抛出以下异常:

Exception while trying to kill process <process name>: System.ComponentModel.Win32Exception (0x80004005): Access is denied
   at System.Diagnostics.Process.Kill()
   at CustomActions.CustomActions.KillAllProcesses(String name, Session session, Nullable`1 wait)

代码通常有效,但奇怪的是它失败了。它是我构建的安装程序的自定义操作的一部分,当它运行时,它在本地系统帐户下运行。我已经看到过去Process.Kill发生了这种情况。我知道there are some alternatives。我不能修改有问题的过程的代码,所以我自己终止它,但我觉得合适。如果我不关心将它留在某个中间状态,因为我正在从系统中卸载它的文件,那么最好的方法来预防需要尽快死掉的进程?如果在全局级别为应用程序设置任何设置并且用户进行升级,则应允许任何IO完成或取消。 P / Invoking TerminateProcess会成为最佳解决方案吗?

0 个答案:

没有答案