2009-09-25 79 views
1

我有一個應用程序runnig在我的雙贏移動..它已與許多DLL的assosiated。 如果我安裝的應用程序中的存儲卡,所有的DLL和.exe來唯一的存儲卡..掛在退出應用程序

我的要求是,如果我拿出存儲卡的應用程序應該退出..

我使用C#.NET 3.5 CF用於開發。我會得到通知達存儲卡刪除..但如果我做KILL的過程像Process.GetCurrentProcess().Kill() ..應用程序hungs up,最終我需要重新啓動我的手機,我不知道如何處理這種最壞的情況...如果我殺死進程也它沒有被殺死..如何解決這個問題...?

這種情況發生的原因是應用程序安裝在存儲卡中,我知道原因也像所有必要的DLL將由於刷卡取出而移出,但如何從任務管理器中終止進程。它讓我頭痛。

請幫助我!

謝謝!

+0

背景這個問題:http://stackoverflow.com/questions/1431447/how -to-identify-storagecard-removed-notification-of-smartphone-devices&http://stackoverflow.com/questions/1470247/my-sample-app-is-getting-crash-while-registering-to-filechangeinfo -notification&http://stackoverflow.com/questions/1475662/how-to-get-process-in-windows-mobile – 2009-09-25 14:23:53

回答

1

這是一個很難回答,因爲克里斯在你的其他問題,一個向你指出,你不能保證所有的代碼都在內存卡被移除後。例如,處理存儲卡移除通知的代碼可能已經定位。

的一種方法是將有一個小應用程序,它安裝到裝置而不是卡,其監視存儲卡移除,然後可以殺死的主應用程序,如果它檢測到卡已被移除。

如果你想獲得你可以使用toolhelp32.dll一一列舉正在運行的進程列表中,你需要的P/Invoke一些本地調用做到這一點。有關步行過程的信息,請參閱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); 
+0

確定.. ..亞光生病嘗試.. 感謝響應 – Naruto 2009-09-28 08:51:53