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 :

Application lancée en tant que service Windows


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 Application lancée en tant que service Windows
    Bonjour tout le monde,

    J'aimerai bien que mon application se lance en tant que service Windows. Après étude et recherche, 2 possibilités sont envisageables :
    1) Indiquer le chemin de l'exe dans l'entrée "Run" de la base de registre
    2) Utiliser la classe [URL="http://code.qt.io/cgit/qt/qtsystems.git/tree/"]

    J'ai opté pour la seconde solution mais j'ai pas des erreurs lorsque j'ai intègré la classe.

    Est ce que quelqu'un a une idée comment procéder. Je travaille avec Qt 5.5 sous VS 2012.

    Merci d'avance

  2. #2
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    Bonjour, moi j'ai utilisé la classe QtService de Qtsolution pour faire un service et cela fonctionne : https://code.qt.io/cgit/qt-solutions/qt-solutions.git/

  3. #3
    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
    Merci pour votre retour.

    En fait, j'ai ajouté les les fichiers .h et .cpp nécessaires à mon projet mais j'ai des problèmes de link lors de la compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >qtservice.obj : error LNK2019: unresolved external symbol "public: bool __cdecl QtServiceController::isInstalled(void)const " (?isInstalled@QtServiceController@@QEBA_NXZ) referenced in function "public: int __cdecl QtServiceBase::exec(void)" (?exec@QtServiceBase@@QEAAHXZ)
    .

    Est ce que vous pouvez m'indiquer si vous avez eu ce problème et si oui comment vous l'avez résolu ?

  4. #4
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    moi j'ai une plus vieille version de qtservice car j'ai fait le projet en mi 2015.
    mais avez vous bien inclus qtservice.h et qtservice_p.h dans votre projet ? il ya t'il bien un include de ces deux fichiers au debut de qtservice.cpp ?
    il faut aussi mettre dans le projet qtservice_win.cpp en plus de qtservice.cpp

    sinon moi j'ai fait une classe Service qui dérive de QtService<QCoreApplication> pour ce projet

  5. #5
    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
    Bonjour,

    Après avoir réussi à intégrer QtService dans mon projet. J'aimerai bien savoir comment vous l'avez utilisé ? Quelles sont les fonctions que vous avez utilisez pour lancer votre application en tant que service Windows ?

    Je me suis renseigner dans la documentation et j'ai fais quelques tests mais ça n'a pas était concluant.

    D'avance Merci pour votre collaboration.

  6. #6
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    rebonjour, j'ai fait une classe qui derive de qui dérive de QtService<QCoreApplication>.ensuite je l'ai declarée dans la fonction main() du projet et appellé une methode dessus.
    (comme cela date d'un an et que je suis en congé aujourd'hui je vous donne plus de détails lundi)
    apres une fois le projet fait, j'ai utilisé la commande sc.exe en console administrateur windows pour installer le service (et aussi le supprimer),car je suis sous windows 7 au travail.
    il faut faire attention de ne pas utiliser d'interface graphique dans votre service windows (votre projet) car un service windows ne comprend pas d'interface graphique donc il ne faut pas utiliser QtWidgets.
    en outre comme je ne savais pas debugger le service j'avais fait une trace dessus au début.

  7. #7
    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
    Ok, Merci pour ces précisions.

    En attendant que vous soyez de retour pour plus de détails.

  8. #8
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    rebonjour,
    vous faites une classe par exemple "service", derivant de QtService<QCoreApplication> avec les methodes protected
    void start();
    void stop();
    void pause();
    void resume();

    ensuite dans le main.cpp de votre projet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <QCoreApplication>
    #include "service.h"
    int main(int argc, char *argv[])
    {
        service serv(argc, argv);
     
        return serv.exec();
    }
    voila...

    et dans la definition de service::start() dans service.cpp vous mettez votre code spécifique à votre service
    (ainsi que eventuellement dans la definition de service::stop() ou aussi service::pause())

  9. #9
    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
    Parfait.

    Je vous remercie pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

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