0
Q
符號設備殺死進程
A
回答
0
拍攝快照,應該工作正常,但你必須使用一個標誌,以避免內存限制拋出一個異常:
[Flags]
private enum SnapshotFlags : uint
{
HeapList = 0x00000001,
Process = 0x00000002,
Thread = 0x00000004,
Module = 0x00000008,
Module32 = 0x00000010,
Inherit = 0x80000000,
All = 0x0000001F,
NoHeaps = 0x40000000
}
然後在正常調用CreateToolHelp32Snapshot函數,你可以得到一個進程列表:
public static Dictionary<UInt32, process> getProcessNameList()
{
int iCnt = 0;
//List<processnames> name_list = new List<processnames>();
Dictionary<UInt32, process> _pList = new Dictionary<uint, process>();
uint procID = 0;
IntPtr pHandle = CreateToolhelp32Snapshot(SnapshotFlags.Process | SnapshotFlags.NoHeaps, procID);
if ((Int32)pHandle == INVALID_HANDLE_VALUE)
throw new Exception("CreateToolhelp32Snapshot error: " + Marshal.GetLastWin32Error().ToString());
if ((int)pHandle != INVALID_HANDLE_VALUE)
{
PROCESSENTRY32 pEntry = new PROCESSENTRY32();
pEntry.dwSize = (uint)Marshal.SizeOf(pEntry);
if (Process32First(pHandle, ref pEntry) == 1)
{
do
{
//name_list.Add(new processnames(pEntry.th32ProcessID, pEntry.szExeFile));
_pList[pEntry.th32ProcessID] = new process(pEntry.th32ProcessID, pEntry.szExeFile, new List<thread>());
iCnt++;
} while (Process32Next(pHandle, ref pEntry) == 1);
}
else
System.Diagnostics.Debug.WriteLine("Process32First error: " + Marshal.GetLastWin32Error().ToString());
CloseToolhelp32Snapshot(pHandle);
}
return _pList;
}
上面的代碼是我的遠程ProcessorUsage test application的一部分。
儘管如此,正常的Windows移動應用程序將終止自己,如果以前的實例已經運行。當您在CSharp或CPP中創建並運行SmartDevice項目(目標是「Windows Mobile ...」)時,這也是默認設置。 如果您的目標是基於標準Windows CE的SDK,則不會生成自動代碼,以防止應用程序的啓動代碼中出現多個實例。
讓我們知道,如果你還需要幫助。
相關問題
- 1. 殺死進程殺死其他進程
- 2. 殺死進程
- 3. 殺死進程
- 4. 殺死不會殺死進程
- 5. 從桌面應用程序中殺死WinCE設備進程
- 6. 殺死mysqld進程
- 7. SIGKILL殺死進程
- 8. VB.NET - 殺死進程
- 9. 殺死進程導致設備或資源忙:'/ dev/ttyUSB0'?
- 10. windows批量殺死進程
- 11. 無法殺死Postgres進程
- 12. 快速殺死進程
- 13. 殺死系統進程
- 14. Ruby:殺死Chrome進程
- 15. 殺死進程事件
- 16. UnobservedTaskException不殺死進程
- 17. 用python殺死進程
- 18. Autohotkey無法殺死進程
- 19. 殺死一個mpi進程
- 20. 如何殺死nohup進程?
- 21. 無法殺死ipython進程
- 22. 殺死Linux進程剛跑
- 23. 殺死某些MSTSC進程
- 24. 殺死進程Excel C#
- 25. 按名稱殺死進程?
- 26. Vbscript中的殺死進程
- 27. 而不殺死Python進程
- 28. 西芹殺死進程
- 29. 殺死進程列表
- 30. 殺死產生進程的進程
謝謝你。 NoHeap標誌正是我所需要的。附註:儘管在執行process.start時大部分時間只會運行一個實例。我發現,如果你正確調用你的呼叫,你可以啓動一個程序的多個實例。 – GH23 2013-04-23 19:08:20
是的,自WM5/CE5以來,noHeap標誌是必不可少的。時序不應該啓用運行具有多個實例的應用程序。如果應用程序已經在運行,並且切換到之前的實例並自行關閉,應用程序應該在開始時進行檢查。 – josef 2013-04-24 04:19:06
然後我不知道它是如何發生的,但不知怎的,我的一個應用程序的多個實例運行。大多數情況下,我只看到一個實例在運行,但偶爾我會看到兩個或三個實例。無論如何,再次感謝它的魅力。 – GH23 2013-04-24 13:08:50