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

Discussion :

QSettings avec QtService

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 4
    Points : 1
    Points
    1
    Par défaut QSettings avec QtService
    Bonjour à tous,

    Mon programme est un service à l'aide de QtService. Tout compile correctement.
    J'utilise QSettings et c'est là que ca bloque.. le problème est que la lecture des paramètres contenus dans le fichier .ini ne s'effectue pas lorsque le programme est lancé en tant que service. Le programme fonctionne nikel si je le lance à partir du cmd:
    SolenSoft.exe -e

    CService.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    class CService : public QtService< QCoreApplication >
    {
    public:
        CService( int argc, char **argv )
            : QtService< QCoreApplication >( argc, argv, "SolenSoft daemon" )
        {
            setServiceDescription( "A TCP/IP service saving alarms & mesures into database" );
            setServiceFlags( QtServiceBase::CanBeSuspended );
            setStartupType( QtServiceController::AutoStartup );
        }
     
        ~CService();
        inline void pause(){ m_daemon->pause(); }
        inline void resume(){ m_daemon->resume(); }
     
    private:
        CServer *m_daemon;
     
    protected:
        void start();
    };
    CService.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    void CService::start(){ //Démarre le service.
        QCoreApplication *app = application();
     
        QSettings s( "config/solenSoft.ini", QSettings::IniFormat );
     
        s.beginGroup( "network" );
        int port = s.value( "port" ).toInt();
        QString ip = s.value( "ipaddress" ).toString();
        s.endGroup();
     
        s.beginGroup( "mysql" );
        QString dataBaseName = s.value( "databasename" ).toString();
        QString hostName = s.value( "hostname" ).toString();
        QString userName = s.value( "username" ).toString();
     
        QCA::SecureArray data = s.value( "password" ).toByteArray();  //Récupère le mot de passe crypté.
        s.endGroup();
     
        QString pw = "";
        ...
    main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include "cservice.h"
     
    int main( int argc, char **argv ){
         CService service( argc, argv );
     
         return service.exec();
    }
    Merci de votre aide!

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 826
    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 826
    Points : 218 287
    Points
    218 287
    Billets dans le blog
    117
    Par défaut
    Bonjour,

    Et vous n'avez aucune erreur ? Rien ne vous indiquant la raison ?
    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.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Le fait est que je passe par un système de log pour afficher le contenu des variables :
    dataBaseName
    hostName
    userName
    etc...

    Ces variables sont égales à "" si je lance le programme en tant que service.

    Si je lance le programmme à l'aide de l'argument -e (c.a.d SolenSoft.exe -e), ces variables reçoivent bien les valeurs contenues dans le .ini. Il me semble que c'est un problème de droits de lecture...

    Cordialement,

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2012
    Messages : 29
    Points : 41
    Points
    41
    Par défaut
    Si c'est un problème de droits d'accès pourquoi ne pas lancer ton application en tant qu'administrateur ?

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour ton intérêt.

    Le service est lancé à partir d'ici:



    et cela ne fonctionne pas.

    Par contre si je fais comme ceci:



    Cela fonctionne. Seulement avec la deuxième solution, l'executable ne se comporte pas comme un service

    Cordialement,
    Images attachées Images attachées   

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Ok je vois, le nom d'utilisateur utilisé est SYSTEM, il faut obligatoirement lancer le service avec le nom d'utilisateur Administrateur?

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/08/2012, 13h16
  2. Problème avec QSet et QDate
    Par drag006 dans le forum Débuter
    Réponses: 4
    Dernier message: 16/10/2011, 03h42
  3. Instanciation d'une classe avec héritage QSettings
    Par bigtouf dans le forum Débuter
    Réponses: 2
    Dernier message: 11/10/2011, 22h44
  4. Réponses: 2
    Dernier message: 12/06/2009, 11h28
  5. Réponses: 1
    Dernier message: 12/09/2008, 22h17

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