2009-09-25 12 views
1

J'ai une application qui fonctionne dans mon win-mobile .. il a assosiated avec de nombreuses DLL. Si j'installer l'application dans la carte de stockage, toutes les DLL et .exe vient à la carte de stockage seulement ..Suspendu dans Quitter l'application

Mon exigence est si je sors application de la carte de stockage doit quitter ..

J'utilise C# .net 3.5 CF pour le développement. J'obtiendrai notification carte de stockage enlevée .. mais si je fais tuer le processus comme Process.GetCurrentProcess().Kill() .. l'application se bloque, finalement j'ai besoin de redémarrer mon mobile, je ne sais pas comment gérer ce pire cas ... si je tue le processus aussi ce n'est pas se faire tuer .. comment résoudre ce problème ...?

Ce cas se produit parce que l'application est installée dans la carte de stockage, je sais que la cause de toute DLL nécessaire sera déplacée en raison de la suppression de la carte, mais comment tuer le processus du gestionnaire de tâches. son mal de tête pour moi.

S'il vous plaît, aidez-moi s'il vous plaît!

Merci!

+0

Contexte de cette question: http://stackoverflow.com/questions/1431447/how -to-identifier-la-carte-supprimée-notification-de-smartphone-devices & http://stackoverflow.com/questions/1470247/mon-appareil-app-is-getting-crash-while-registering-to-filechangeinfo -notification & http://stackoverflow.com/questions/1475662/how-to-get-process-in-windows-mobile –

Répondre

1

Il est difficile de répondre à cette question, car comme Chris vous l'a fait remarquer dans l'une de vos autres questions, vous ne pouvez pas garantir que le code sera en mémoire une fois la carte retirée. Par exemple, votre code qui gère la notification de suppression de la carte de stockage a peut-être été lancé. Un moyen serait d'avoir une petite application qui s'installe sur le périphérique plutôt que la carte, qui surveille la suppression de la carte de stockage, et peut ensuite tuer l'application principale si elle détecte que la carte a été retirée.

Si vous souhaitez obtenir la liste des processus en cours d'exécution, vous pouvez les énumérer à l'aide du fichier toolhelp32.dll. Pour ce faire, vous devrez appeler p/invoquer des appels natifs. Voir here pour plus d'informations sur la marche des processus. Fondamentalement, créez l'instantané toolhelp 32, parcourez chaque processus en utilisant process32first et process32next jusqu'à ce que vous trouviez votre application et que vous obteniez l'identifiant du processus.

Étant donné que vous avez un identifiant de processus, vous pouvez ensuite utiliser ces importations dll pour ouvrir le processus et y mettre fin:

[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

ok .. mat .. mal essayer .. merci pour les réponses – Naruto

Questions connexes