挂在退出应用程序

时间:2009-09-25 11:17:29

标签: c# .net windows-mobile

我在win-mobile中有一个app runnig ..它与许多DLL有关。 如果我在存储卡中安装应用程序,所有DLL和.exe只会进入存储卡..

我的要求是如果我拿出存储卡应用程序应该退出..

我正在使用c#.net 3.5 CF进行开发。我将获取通知存储卡已删除..但如果我做了像Process.GetCurrentProcess().Kill()这样的过程..应用程序挂起,最终我需要重新启动我的手机,我不知道如何处理这种最坏的情况...如果我杀了进程也没有被杀死..如何解决这个问题......?

这种情况的发生是因为应用程序安装在存储卡中,我知道原因也像所有必要的dll将由于卡的移除而被移出,但是如何从任务管理器中删除该进程。对我来说很头疼。

拜托,请帮助我!

谢谢!

1 个答案:

答案 0 :(得分:1)

这是一个很难回答的问题,因为正如克里斯在你的其他一个问题中指出的那样,你不能保证在删除卡后任何代码都会在内存中。例如,您处理存储卡删除通知的代码可能已被调整。

一种方法是安装一个小型应用程序,安装到设备而不是卡上,监视存储卡的移除,然后如果检测到卡已被移除,则可以终止主应用程序。

如果要获取正在运行的进程列表,可以使用toolhelp32.dll枚举它们,则需要p /调用一些本机调用来执行此操作。有关走过程的信息,请参阅here。基本上创建toolhelp 32快照,使用process32first和process32next遍历每个进程,直到找到您的应用并获取进程ID。

鉴于您有进程ID,您可以使用这些dll导入来打开进程并终止进程:

[DllImport("coredll.dll", SetLastError = true)]
private static extern bool TerminateProcess(IntPtr hProcess, uint ExitCode);

[DllImport("coredll.dll", SetLastError = true)]
private static extern IntPtr OpenProcess(int flags, bool fInherit, int PID);