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

C++ Discussion :

Empêcher un processus s'il a déjà été lancé auparavant


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 216
    Points : 88
    Points
    88
    Par défaut Empêcher un processus s'il a déjà été lancé auparavant
    Bonjour,

    Je voulais savoir s'il existe un moyen d'empêcher de relancer un processus (dans mon cas, lancé un questionnaire développé avec Qt), si celui-ci a déjà été exécuté (dans mon cas, le questionnaire a déjà été rempli et validé)

    J'ai besoin de sécuriser le fait que le processus ne peut plus se lancer une deuxième fois.

    J'ai pensé à cacher une clef dans le registre afin que l'application se souvienne que le questionnaire a déjà été rempli. Mais peut-être existe-t-il d'autres moyens? Est-ce suffisant?

    Merci d'avance

  2. #2
    Membre expérimenté Avatar de alexrtz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2003
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 639
    Points : 1 359
    Points
    1 359
    Par défaut
    Il existe une fonction sous Windows qui permet de savoir ça, mais j'me rappelle plus laquelle

    Sinon, tu peux :
    - créer un fichier de lock qui sera supprimé à l'arrêt du programme (comme ce qui est fait pour Firefox)
    - lier une socket à un port (si tu essayes de lier la socket deux fois sur le même port, ça foire)
    "Je suis incapable d'expliquer ce qui se passa ensuite : je lâchai quelque chose, quelque chose à quoi je m'agrippais depuis toujours sans m'en rendre compte. Je m'enfonçais dans une obscurité chaude, moelleuse et protectrice, tandis qu'un loup montait la garde par mes propres yeux."

  3. #3
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Puisque tu es en Qt, autant utiliser la méthode Qt de faire : utiliser QtSingleApplication plutôt que QtApplication.

    http://doc.trolltech.com/solutions/4...plication.html

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 216
    Points : 88
    Points
    88
    Par défaut
    Merci pour ces réponses,

    J'utilise déjà QtSingleApplication afin de prévenir de lancer deux fois mon application principale.

    Cependant mon questionnaire est une forme, pas une application (.exe), que je lance depuis l'application principale.

    De plus, QtSingleApplication permet bien de ne pas lancer deux fois de suite la même application. Cependant, si je ferme mon application, je peux la relancer sans problème.

    Hors j'aimerais que ce formulaire ne puisse s'afficher qu'une et une seule fois.

  5. #5
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Citation Envoyé par pasqual Voir le message
    Cependant mon questionnaire est une forme, pas une application (.exe), que je lance depuis l'application principale.
    C'est a dire c'est quoi pour toi une forme ?
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 216
    Points : 88
    Points
    88
    Par défaut
    une forme pour moi c'est une nouvelle fenêtre qui contient le formulaire

    Ce que je veux c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(formulaire déjà rempli)
      j affiche mon questionnaire
    else
      rien
    Je pense qu'on est obligé d'inscrire qqch dans le registre

  7. #7
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Si tu veux qu'il ne s'affiche qu'une seule, je suppose que c'est que, quelque part, tu stockes ce qui a été rempli. Donc, pourquoi ne pas utiliser ce même endroit pour stocker le fait que le questionnaire a déjà été rempli ?

    La base de registre est une solution, mais windows uniquement. Si tu pars sur du développement en C++/Qt, c'est dommage de se limiter ainsi.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 216
    Points : 88
    Points
    88
    Par défaut
    Merci pour ta réponse white_tentacle,

    Oui, je stocke les réponses du questionnaires dans une base de donnée. Cependant, comme le questionnaire peut être envoyé anonymement, il m'est difficile d'identifier l'expéditeur.


    La base de registre est une solution, mais windows uniquement. Si tu pars sur du développement en C++/Qt, c'est dommage de se limiter ainsi
    Effectivement, mais je voie pas trop d'autre alternative...

  9. #9
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Ok, je commence à comprendre le besoin.

    L'idée est d'empêcher quelqu'un de soumettre plusieurs fois le même questionnaire, c'est bien cela ?

    Alors dis toi bien que quelque soit la méthode employée, elle ne sera pas fiable (suffit d'utiliser différentes machines virtuelles, par exemple). Par contre, il y a quelques moyens simples à mettre en oeuvre :
    - un fichier que tu écris dans le répertoire de l'utilisateur (problème : l'utilisateur peut l'effacer comme il veut)
    - générer un identifiant unique de la machine (par exemple, en récupérant l'adresse mac de la carte réseau), et le stocker dans ta base de données (probléme : si plusieurs utilisateurs utilisent la même machine, ils se verront considérés comme un seul, ça peut se contourner en utilisant aussi l'identifiant utilisateur + l'identifiant machine).
    - la base de registre, effectivement, mais c'est du windows uniquement

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 216
    Points : 88
    Points
    88
    Par défaut
    L'idée est d'empêcher quelqu'un de soumettre plusieurs fois le même questionnaire, c'est bien cela ?
    Oui en fait l'idée en d'empêcher l'affichage du questionnaire s'il a déjà été remplit et correctement reçu sur le serveur (l'application reçoit en retour une confirmation que le formulaire a bien été enregistré). Mais cela reviens finalement au même que de dire empêcher quelqu'un de soumettre plusieurs fois le même questionnaire.

    Merci pour ces réponses utiles,

    je pense que je vais maintenant m'en sortir

  11. #11
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    - générer un identifiant unique de la machine (par exemple, en récupérant l'adresse mac de la carte réseau), et le stocker dans ta base de données (probléme : si plusieurs utilisateurs utilisent la même machine, ils se verront considérés comme un seul, ça peut se contourner en utilisant aussi l'identifiant utilisateur + l'identifiant machine).
    Malheureusement rien de plus facile à spoofer qu'une adresse MAC.
    En revanche la clé d'enregistrement d'un Windows est plus fiable, quoique.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 217
    Points : 228
    Points
    228
    Par défaut
    Je ne comprends pas pourquoi l'idée débile suivante ne fonctionnerait pas:

    lorsque l'utilisateur demande à remplir le questionnaire:
    le questionnaire a-t'il déjà été rempli? (un bête bool)
    si oui ne rien faire
    sinon lancer le questionnaire, à la validation de celui-ci mettre le bool à true

  13. #13
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    @khazna: J'y avais pensé, mais ici, le problème c'est que le bool va être réinitialisé lors de la fermeture de l'application...

    J'ai pas plus d'idée que ce qui à été dit, désolé ...
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/02/2009, 15h54
  2. probleme avec les processus
    Par saidi dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 05/02/2003, 00h18
  3. [MSXML] Comment empécher la conversion des entités ?
    Par nima dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 08/11/2002, 14h14
  4. [VB6] [Système] Tuer un processus courant
    Par mdoyer dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 22/10/2002, 14h47
  5. Réponses: 2
    Dernier message: 04/10/2002, 09h13

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