IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Comment savoir si mon application est deja lancée


Sujet :

Qt

  1. #1
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 276
    Points : 83
    Points
    83
    Par défaut Comment savoir si mon application est deja lancée
    Salut tout le monde, je suis en train de compiler mon application développée avec Qt4.3 sous Mac OS X 10.4 Tiger PPC. J'ai un traitement qui fait la mise à jour automatique de l'exécutable et pour cela j'ai besoin de savoir si mon application est déjà lancée ou pas (elle tourne ou pas). Es ce que quelqu'un pourrait m'indiquer une méthode d'avoir cette information sous Mac.
    Merci de vos réponse

  2. #2
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Salut,

    Si tu disposes d'une license commerciale, alors il y a une solution QtSingleApplication dispo chez TT qui remplit ce rôle de façon multi-plateforme.

    Sinon, plusieurs options:
    • créer un fichier de lock (à supprimer lors de la fermeture de l'appli bien sûr)
    • occuper une socket durant le cycle de vie de l'appli, et checker sa disponibilité au démarrage de l'instance
    • prendre des solutions spécifiques à la plateforme (mais plus risqué que la solution basée sur les sockets à ce qu'il paraît dû au haut risque de non libération après un crash => reboot nécessaire):
      • win32: mutex
      • linux: sémaphore
      • osx: sémaphone aussi je pense puisque c'est basé sur linux

  3. #3
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    La solution "artisanale" du fichier de lock semble être correcte en effet IrmatDen.
    Cela consisterait à créer un fichier au lancement de l'application et à le supprimer à la fermeture.
    Ainsi, si le fichier existe déjà, c'est que l'application est déjà lancée et qu'elle n'est pas fermée -> cela interdit le lancement de toute autre instance de ton application.

  4. #4
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Seul problème (mais gros), en cas de crash, le fichier existe, et il faut prévoir un mode "recovery" au lancement de l'application avec tout les risques que ça implique.

  5. #5
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Oui. C'est une technique plutôt artisanale mais qui n'est pas assez fiable selon les cas.

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 704
    Points
    704
    Par défaut
    Bonjour !

    Citation Envoyé par Alp Voir le message
    La solution "artisanale" du fichier de lock semble être correcte en effet IrmatDen.
    Cependant cela pose tout de même le problème du plantage de l'application : on est obliger de supprimer manuellement le fichier lock pour pouvoir relancer le soft.

    Citation Envoyé par IrmatDen
    # prendre des solutions spécifiques à la plateforme (mais plus risqué que la solution basée sur les sockets à ce qu'il paraît dû au haut risque de non libération après un crash => reboot nécessaire)
    Mmm... Je suis septique pour la non libération... J'utilise cette méthode sous Windows, et malgré les plantages réguliers de mon appli, je peux relancer aussitôt une nouvelle instance sans soucis ! Et je viens même de m'apercevoir que le mutex que je crée n'est même pas détruit à la fin de l'exécution et il n'y a aucun soucis par la suite !
    Après pour les sémaphores & Unix je ne sais pas...

    Pour ma part, j'opterais donc pour la solution avec des sockets... (qui peut cependant être "lourde" pour une appli Qt, si on n'utilise pas le framework QtNetwork ailleurs...)

  7. #7
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    En effet, cela oblige à lier l'application au module QtNetwork et c'est une solution lourde à mettre en oeuvre. Cela dépend donc de la nature du programme (personnel, professionnel) ainsi que de son importance. Par contre, c'est clairement la solution la plus fiable.

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Je me demande si avec Qt 4.4 il ne serait pas possible d'utiliser qsharedmemory
    http://qt.developpez.com/doc/latest/...y.html#details

  9. #9
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Citation Envoyé par Fabllot Voir le message
    Après pour les sémaphores & Unix je ne sais pas...
    Ca a été confirmé par un linuxien en fait d'où la précision

  10. #10
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par IrmatDen Voir le message
    osx: sémaphone aussi je pense puisque c'est basé sur linux
    sur bsd

    Dans le cas d'une appli liee au hardware, on a besoin de s'assurer d'une mono instance sur la machine, a contrario de la mono instance "classique" par session utilisateur. Ainsi sous Windows par exemple, depuis XP et le "Fast User Switching", on peut avoir plusieurs users logges simultanement, chacun faisant tourner dans sa session ton appli mono instance... Evidement, idem sous unix.

    Les approches fichier/socket ne sont pas impactees par cet aspect, contrairement aux objets nommes comme les mutex (cependant, sous Windows au moins, on peut aussi nommer un objet "globalement")

  11. #11
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 276
    Points : 83
    Points
    83
    Par défaut
    Juste pour vous communiquer la solution que j'ai trouvé. Elle plutot simple et trés facile à implémenter. En fait elle consiste en l'utlisation de QProcess et la commande shell ps :
    QProcess process;
    process.start("bash", QStringList()<< "-c" << "ps xc | grep monApp | grep -v grep");
    QByteArray result = start.readAll();
    Et ça marche, il suffit de tester sur la valeur de result.
    Merci à tout le monde pour leur aide précieuse.

  12. #12
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par mercure07 Voir le message
    Juste pour vous communiquer la solution que j'ai trouvé. Elle plutot simple et trés facile à implémenter. En fait elle consiste en l'utlisation de QProcess et la commande shell ps :
    QProcess process;
    process.start("bash", QStringList()<< "-c" << "ps xc | grep monApp | grep -v grep");
    QByteArray result = start.readAll();
    Et ça marche, il suffit de tester sur la valeur de result.
    Merci à tout le monde pour leur aide précieuse.
    Ca marchera que sous linux mais interessant

  13. #13
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    Attention avec ce genre de solution basees sur le nom de l'exe : si on renomme ton programme, c'est fini...

  14. #14
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Mais avec QApplication on peut récupérer le nom, non?

  15. #15
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    Yes, mais ca n'empeche pas que MonApplication1 et MonApplication2 peuvent tourner en "meme temps"

  16. #16
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    En fait il y a aussi un autre aspect, c'est si une autre appli (pas la tienne) porte le meme nom. C'est peu probable bien sur... mais sur un appel a grep en plus... Murphy et sa loi sont la, n'oubliez pas

  17. #17
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Mouais... C'est tiré par les cheveux mais en effet ce n'est pas infaillible.

  18. #18
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    Par contre le coup que l'utilisateur renomme le fichier pour en executer une seconde instance, ca c'est tout a fait possible

  19. #19
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Du coup tu penses à une solution optimale ?

  20. #20
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    Ben IrmatDen a bien resume les solutions classiques

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/10/2012, 17h39
  2. Réponses: 2
    Dernier message: 05/04/2012, 14h06
  3. comment savoir si mon application est ouverte sur un poste distant
    Par melancolie dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 08/02/2011, 10h15
  4. Réponses: 2
    Dernier message: 14/09/2006, 23h35
  5. Comment savoir si une application est lancée ?
    Par Teddy dans le forum Delphi
    Réponses: 2
    Dernier message: 02/07/2006, 19h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo