【问题标题】:Process.Kill() returns access deniedProcess.Kill() 返回拒绝访问
【发布时间】:2014-11-30 16:34:18
【问题描述】:

我正在尝试使用 C# 应用程序中的 CMD 命令行终止进程,但是当我启动应用程序时,什么也没有发生...当我尝试从命令提示符处终止时,我收到消息:“访问被拒绝”。我试图以管理员身份运行我的应用程序,但该进程已被终止。我怎样才能不总是使用“以管理员身份运行”?

代码:

System.Diagnostics.Process process = new System.Diagnostics.Process();
            System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
            startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            startInfo.FileName = "cmd.exe";
            startInfo.Arguments = "/C taskkill /F /IM APP.EXE";
            process.StartInfo = startInfo;
            process.Start();

【问题讨论】:

  • 要能够杀死任何程序,您必须对其拥有足够的权限。您通常只能杀死属于您的进程。例如,您不能杀死以管理员或系统进程启动的程序,至少在不提升自己的情况下是这样。澄清一下,预期的“受害者”是什么?
  • 进程来自和应用程序,启动时需要 UAC,所以我认为这是问题所在......只是一个简单的应用程序,而不是“受害者”。
  • 是的,“受害者”只是一种有趣的说法:P。好的,但是如果目标程序以提升的权限运行,那么 任何 想要操作它的其他程序也必须使用提升的权限,至少对于这种特殊情况。即使你用任务管理器试试,你也必须提升它。

标签: c# process


【解决方案1】:

试试这个

System.Diagnostics.Process process = new System.Diagnostics.Process();
        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
        startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        startInfo.FileName = "cmd.exe";
        startInfo.UserName = "Administrator";
        startInfo.Password = <password>;
        startInfo.Arguments = "/C taskkill /F /IM APP.EXE";
        process.StartInfo = startInfo;
        process.Start();

【讨论】:

  • 这个应用应该在更多的机器上。
  • @Yildirim 检查大卫皮尔金顿的答案!您可以将 /user:Administrator 添加到参数中,但始终会要求您输入密码
【解决方案2】:

你需要在清单中设置这个

<requestedExecutionLevel level="requireAdministrator" uiAccess="true"/>

【讨论】:

  • @Yildirim 我不确定你的意思
【解决方案3】:

这意味着你的应用程序是在管理员下运行的,所以你也只能在管理员下杀死它。 尝试在其他用户下启动应用程序。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多