我使用 ProcessCE .
它在 Windows Mobile 6.1 上运行良好。 但是在 Windows Mobile 6.5 上 -> 当我使用 Terranova.API 终止时,TerminateProcess 抛出错误 6 = ERROR_INVALID_HANDLE 的异常。
internal static void KillProcess(IntPtr pid)
{
IntPtr process_handle = OpenProcess(PROCESS_TERMINATE, false, (int)pid);
if (process_handle == (IntPtr)INVALID_HANDLE_VALUE)
throw new Win32Exception(Marshal.GetLastWin32Error(), "OpenProcess failed.");
try
{
bool result = TerminateProcess(process_handle, 0);
if (result == false)
throw new Win32Exception(Marshal.GetLastWin32Error(), "TerminateProcess failed."); //THROW EXCEPTION on Windows Mobile 6.5
}
finally
{
CloseHandle(process_handle);
}
}
请帮忙。
最佳答案
代码错误地检查了 OpenProcess()
是否失败。 OpenProcess 的文档声明函数失败时的返回值为 NULL
。在 C 中,NULL
只是一个扩展为 0
的宏,因此在 C# 中,您应该使用 IntPtr.Zero
代替 NULL
引用 Win32 API 时。
如果一个进程确实拥有 INVALID_HANDLE_VALUE
的句柄,那么当没有错误情况时,此代码将抛出异常。
Win32 API 不一致地使用 HANDLE
。在某些情况下,该函数在失败时返回 NULL
,在大多数情况下,该函数在出错时返回 INVALID_HANDLE_VALUE
。这是函数返回 NULL
而不是 INVALID_HANDLE_VALUE
以指示失败的情况之一。
if (process_handle == IntPtr.Zero)
throw new Win32Exception(Marshal.GetLastWin32Error(), "OpenProcess failed.");
关于c# - 如何在 Windows Mobile 6.5 上终止进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31922784/