簡體   English   中英

如何殺死Windows-CE中的進程?

[英]how to kill process in Windows-CE?

如何使用C#代碼從終端(Windows-CE 5.0)中終止進程Windows \\ MyProcc.exe?

首先通過給出正在運行的exe的名稱來查找進程並將其終止。 使用System.Diagnostics名稱空間。

Process[] Prs = Process.GetProcessesById(RunninExe);
if (Prs.Length > 0)
{
      foreach (Process Prss in Prs)
      {
          Prss.Kill();
      }
}

答案是您必須使用toolhelp API。 在MSDN上有一個完整的例子 ,包括枚舉進程和查殺所選進程。

代碼項目完全符合您的要求。 我發現這個課在CE中的殺戮過程中非常有用。

http://www.codeproject.com/Articles/36841/Compact-Framework-Process-class-that-supports-full

    ProcessInfo[] list = ProcessCE.GetProcesses();

    foreach (ProcessInfo pinfo in list)
    {
        if (pinfo.FullPath.EndsWith("MyExe.exe"))
            pinfo.Kill();
    }

找到進程后,可以調用Kill命令。

它位於System.Diagnostics並且在.NET Compact Framework中也受支持,請參見此處:

Process.Kill方法

不幸的是,看起來Process.GetProcess在.NET CF中不起作用,所以你應該在殺死它之前使用另一種方法來找到你的進程,還有關於這個的文章:

Compact Framework Process類,支持完全指定的文件路徑

雖然Compact Framework沒有為您提供列出所有流程的本地方式,但仍然可以輕松管理您創建的流程。

當您使用Process.Start(名稱,參數)時,您只返回一個布爾值。 這是因為該函數是一個共享函數,只是在創建一個進程時使用,后來不關心它。 它只是說它是否創造了它。

您真正想要的是在啟動可執行文件時獲取進程描述符的副本,這意味着您需要創建一個Process 實例 ,然后使用該實例中的方法來啟動可執行文件。

因此,創建一個新的Process實例 - 將其稱為P. 現在這實際上是一個流程描述符 - 但它尚未連接到流程。

你會發現P暴露了更多的屬性。

P.StartInfo.FileNameP.StartInfo.Arguments中設置可執行文件名和參數(如果有的話),現在調用P.Start()

如果它返回True,則會將進程Id放入P.Id中 ,並保持對您的進程的實時鏈接。

P.Responding P.HasExitedP.ExitCode中的值告訴您它是否仍然在運行,如果沒有,它是如何結束的,你可以使用無參數函數P.Kill()在你厭倦時結束它因為它結束了與描述符相關的進程。

只需為要管理的每個進程創建一個新的Process實例,通過實例化變量而不是通用共享函數Process.Start()啟動它,並將其作為流程的鏈接。

如果你只保留P.Id的值,你仍然可以使用共享函數Process.Kill(Id)來終止它,你可以使用Process.GetProcessById()來獲取對引用它的描述符實例的引用。

這應該適用於任何語言。

Process結構還包含一個名為MainWindowHandle的東西,它看起來像是創建任務的句柄。 我從來沒有檢查過它是否匹配,但它確實填充了。

所以,如果你想要殺死“Windows \\ MyProcc.exe”這很容易,只要它真的是“你的過程”,因為你可以用一種方式創建它,讓你回到它的Id和Descriptor。

如果“Windows \\ MyProcc.exe”真的是“Windows \\ Someone-elses-Procc.exe”那么它就不那么容易了,因為你需要知道Id並且沒有簡單的方法來獲取它,除非它是你的。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM