|
FOROS PROFESIONALES WINDEV, WEBDEV y WINDEV Mobile |
| | | | | |
Comment détecter fermeture anormale d'application? |
Iniciado por saadidimiad, 10,nov. 2004 14:16 - 5 respuestas |
| |
| | | |
|
| |
Publicado el 10,noviembre 2004 - 14:16 |
j'ai une application Multiinstance qui peut etre accessible par plusieurs utilisateurs en meme temps. mais pas le meme utilisateur 2 fois. pour faire ce controle j'enregistre les utilisateurs connectés dans une table. une fois un utilisateur est deconnecté je le supprime de la table. Le PB c'est que quand un utilisateur quitte anormalement (execution de traitement incoherent qui peut provoquer la fermeture de l'application...) je n'arrive pas à détecter la fermeture de l'application pour pouvoir le supprimer de la table. Est ce ke klk'un a une idée? Merci |
| |
| |
| | | |
|
| | |
| |
Publicado el 10,noviembre 2004 - 14:33 |
Peut-être stocker également le handle de la fenetre principale et voir si il existe toujours lors du démarrage... Peut-être utiliser la fonction ExeLancé au démarrage (à moins que les != utilisateurs ne soient sur la même machine) Ou mieux (mais +compliqué) récupérer l'id du processus de l'instance de l'utilisateur (via les API, je pense pas que WD gere ca) et le stocker avec l'id de l'utilisateur. Ainsi si l'user est dans la base mais que le processus n'existe plus c'est qu'il y a eu plantage (même chose qu'avec le handle de la fenetre principale mais je suppose qu'une appli doit pouvoir continuer à tourner sans sa premiere fenetre si elle en a lancé d'autres independantes...) Bon je suis pas clair mais ca peut être des pistes...
-- ----------- Petit Malin
"Mouad" <saadidimiad@yahoo.fr> a écrit dans le message de news: 4191fce7@news.pcsoft.fr...
j'ai une application Multiinstance qui peut etre accessible par plusieurs utilisateurs en meme temps. mais pas le meme utilisateur 2 fois. pour faire ce controle j'enregistre les utilisateurs connectés dans une table. une fois un utilisateur est deconnecté je le supprime de la table. Le PB c'est que quand un utilisateur quitte anormalement (execution de traitement incoherent qui peut provoquer la fermeture de l'application...) je n'arrive pas à détecter la fermeture de l'application pour pouvoir le supprimer de la table. Est ce ke klk'un a une idée? Merci
|
| |
| |
| | | |
|
| | |
| |
Publicado el 10,noviembre 2004 - 16:23 |
Si tu veux que la détection intempestive soit détectable tu peux créer un fichier comme tu le fait, mais en plus le bloquer. Si au redémarrage le fichier est présent ET est bloqué, c'est que l'application est lancé. Par contre s'il est présent mais pas bloqué, c'est que l'application n'a pas correctement été terminée (il faut qu'elle débloque en fermeture de projet bien sûr).
-- forumnewswindev@ifrance.com |
| |
| |
| | | |
|
| | |
| |
Publicado el 10,noviembre 2004 - 17:18 |
Salut,
J'aurais une solution à te proposer.
Tu peux continuer à enregistrer chacun des utilisateurs dans ta table, mais je te conseillerais que chacun des utilisateur bloque l'enregistrement (avec son nom d'usger probablement) dans la table. De cette manière, si un utilisateur ouvre une autre instance de l'application et qu'il trouve un enregistrement correspondant dans la table et que cet enregistrement est bloqué, c'est qu'une autre instance de l'application est ouverte. Par contre si l'utilisateur se trouve dans la table mais qu'il est capable de bloquer l'enregistrement, c'est que l'enregistrement a été débloqué mais pas supprimé (ex: l'application a été fermé avec alt+ctr+del).
J'espère que ça peux t'aider
Mathieu |
| |
| |
| | | |
|
| | |
| |
Publicado el 10,noviembre 2004 - 17:21 |
Ou bien regarde en essayant de correspondre entre tes appli à l'aide des sockets.
Cordialement,
ben |
| |
| |
| | | |
|
| | |
| |
Publicado el 13,noviembre 2004 - 22:06 |
J'utilise un autre principe: la base de données des utilisateurs de l'application est créée et gérée par un administrateur. Chaque utilisateur à un niveau d'accès lui donnant ou pas des accès à des parties de programme. Il y a aussi deux champs "MaximumLogin" et "CurrenLogin". Le premier est le nombre maximum d'accès par utilisateur et peut donc être défini par l'administrateur; le deuxième est à zéro et est incrémenté au lancement de l'application au moment du choix de l'utilisateur: une routine contrôle le nombre d'accès autorisés et vérifie si le nombre d'accès en cours ne dépasse pas cette valeur, sinon pas d'accès au programme! Lors de la fermeture du programme, la valeur "CurrenLogin" est de-incrémentée d'une unité. Ainsi si le programme est mal fermé par un utlisateur qui a un seul accès, il ne pourra pas ouvrir le programme et devra faire appel à l'administrateur Exemple:
MaximumLogin est à 1 CurrentLogin est à 0 L'utilisateur X à droit à un accès au programme et actuellement n'utilise pas l'application. Lors de l'ouverture de l'application par X, CurrentLogin est incrémenté, vaut donc 1; 1 est <= à la valeur de MaximumLogin et donc il peut ouvrir l'application. X crash l'application. Lors de l'ouverture suivante, CurrentLogin st incrémenté, il vaut donc 2; 2 est > que MaximumLogin et donc l'accès est refusé. |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|