2014-10-06 97 views
0

我试图从我的C#应用​​程序使用CMD命令行杀死一个进程,但是当我启动应用程序时什么都没有发生......当我尝试从命令提示符中杀死时,我收到消息:“访问被拒绝”。我尝试以管理员身份运行我的应用程序,并且该进程被终止。我如何管理不总是使用“以管理员身份运行”?Process.Kill()返回访问被拒绝

代码:

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(); 
+1

要杀死任何程序,您必须拥有足够的权限。你通常只能杀死属于你的进程。例如,你不能杀死以管理员或系统进程启动的程序,至少不能提升自己。澄清,目标“受害者”是什么? – Alejandro 2014-10-06 12:06:43

+0

这个过程来自于需要UAC的应用程序,因此我认为这是问题...只是一个简单的应用程序,而不是“受害者”。 – Yildirim 2014-10-06 12:16:44

+0

是的,“受害者”只是一个有趣的说法:P。好的,但是如果目标程序使用提升的权限运行,那么任何其他想要操作它的程序都必须使用提升的权限,至少在这种情况下是这样。即使你使用任务管理器来尝试它,你也必须提升它。 – Alejandro 2014-10-06 12:25:04

回答

0

你需要设置这个清单中的

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

过程仍然没有被杀死... – Yildirim 2014-10-06 12:34:10

+0

@Yildirim我不知道你的意思 – 2014-10-06 12:35:32

2

试试这个

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(); 
+0

这个应用程序它应该在更多的机器上。 – Yildirim 2014-10-06 12:19:00

+0

@Yildirim检查大卫皮尔金顿的答案!您可以将/ user:Administrator添加到参数中,但您总会被要求输入密码 – mybirthname 2014-10-06 12:23:33

0

这意味着你的申请是根据管理员跑过来,这样你就可以也只能在管理员下面杀掉它。 尝试在其他用户下启动应用程序。

希望得到这个帮助。