2014-10-06 78 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

這意味着你的申請是根據管理員跑過來,這樣你就可以也只能在管理員下面殺掉它。 嘗試在其他用戶下啓動應用程序。

希望得到這個幫助。