[英]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.GetProcess在.NET CF中不起作用,所以你應該在殺死它之前使用另一種方法來找到你的進程,還有關於這個的文章:
雖然Compact Framework沒有為您提供列出所有流程的本地方式,但仍然可以輕松管理您創建的流程。
當您使用Process.Start(名稱,參數)時,您只返回一個布爾值。 這是因為該函數是一個共享函數,只是在創建一個進程時使用,后來不關心它。 它只是說它是否創造了它。
您真正想要的是在啟動可執行文件時獲取進程描述符的副本,這意味着您需要創建一個新的Process 實例 ,然后使用該實例中的方法來啟動可執行文件。
因此,創建一個新的Process實例 - 將其稱為P. 現在這實際上是一個流程描述符 - 但它尚未連接到流程。
你會發現P暴露了更多的屬性。
在P.StartInfo.FileName和P.StartInfo.Arguments中設置可執行文件名和參數(如果有的話),現在調用P.Start()
如果它返回True,則會將進程Id放入P.Id中 ,並保持對您的進程的實時鏈接。
P.Responding P.HasExited和P.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.