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 :

[Windows] Lancer un .exe (application service) en C++


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2008
    Messages : 111
    Points : 50
    Points
    50
    Par défaut [Windows] Lancer un .exe (application service) en C++
    Bonjour à tous,

    J'ai créé un programme en C++ qui s'exécute en tant que service.
    Lorsque je double-clique sur le fichier .exe, il se lance mais quand je lance depuis un programme c++ ça ne fonctionne pas .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	system("c:\ServiceWin32AgentSNMP.exe");
    Je pense connaître le problème du fait qu'il ne lance l'exécutable que lorsqu'il se trouve dans le dossier de celui-ci. Mais je sais pas comment je dois faire pour faire cela en c++.



    Merci d'avance.

  2. #2
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    Bonjour,

    t as pas l impression que le S est de couleur etrange (celui derriere le anti-slash) ?

    peut etre en le doublant
    "vaste programme"

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2008
    Messages : 111
    Points : 50
    Points
    50
    Par défaut
    je suis un ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system("C:\\ServiceWin32AgentSNMP.exe");
    ça marchera mieux comme cela.

    Maintenant il se lance et il m'affiche un message d'erreur (pièce jointe)
    Images attachées Images attachées  

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    As-tu exploré la piste de l'erreur de dossier ?
    Si tu utilises CreateProcess(), tu peux lui spécifier son "dossier courant"...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2008
    Messages : 111
    Points : 50
    Points
    50
    Par défaut
    Je n'utilise pas CreateProcess().

    J'utilise les threads généré par RAD studio de borland. Et ce thread est contenu dans un prjet qui consiste à créer un service en C++.

    Mais quand je double-clik sur l'exe. Tout va bien, il se lance bien mais quand le lance depuis un autre programme ça ne marche pas.

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    C'est pourquoi je te dis qu'il serait peut-être une bonne idée d'utiliser CreateProcess() à la place de system(), pour pouvoir spécifier le bon "répertoire courant"...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2008
    Messages : 111
    Points : 50
    Points
    50
    Par défaut
    Le CreateProcess me renvoie true mais ça plante encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    LPSTARTUPINFO lpStartupInfo;
      LPPROCESS_INFORMATION lpProcessInformation;
      bool result=false;
      result=CreateProcess("C:\\Windows\\system32\\cmd.exe", "C:\\Debug\\ServiceWin32AgentSNMP.exe", NULL, NULL, FALSE, 0, NULL, NULL, lpStartupInfo, lpProcessInformation);
      return result;
    Message d'erreur:
    Images attachées Images attachées  

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Mais voyons, c'est un miracle que ça lance le processus fils avec un appel pareil!
    Arrête de programmer au hasard!
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    STARTUPINFO si = {0};
    si.cb = sizeof si;
    PROCESS_INFORMATION pi = {0};
    BOOL bResult = CreateProcess(TEXT("C:\\ServiceWin32AgentSNMP.exe"), NULL, NULL, NULL, FALSE, 0, NULL, TEXT("C:\\"), &si, &pi);
    if(bResult)
    {
    	//Fermer les handles dont on n'a pas besoin dans pi
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2008
    Messages : 111
    Points : 50
    Points
    50
    Par défaut
    Je me suis rendu compte de mes bêtises avant que tu postes ta réponse...

    Mais bon j'ai repris repris ton morceau de code au cas où...

    La chose que je n'ai pas dit et c'est pour cela que ça ne marche pas c'est que ce morceau de code est dans une DLL...

    J'ai fait des tests dans un mode console tout simple et ça fonctionne très bien. . Grâce à ton aide.

    Part contre il faudrait que ça fonctionne lorsque c'est dans ma DLL.
    Sinon je ferai autrement mais ça serait idéal. J'aimerai également comprendre pourquoi ça ne marche pas dans la DLL et que ça marche dans un mode console.

    J'utilise Windev pour l'utilisation de la DLL.
    Et c'est en l'appelant que ça plante.

    J'ai pris l'exécutable du mode console qui fonctionne très bien, je le lance depuis Windev et ça plante.


    EDIT : j'ai quelques améliorations dans mon service, et du coups ça passe nickel partout.

    Pour information, le problème venait d'un strcpy qui plantait dans une fonction. J'ai supprimer la fonction et intégrer celle-ci dans mon thread et voilà.

    Merci à tous de votre aide.

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

Discussions similaires

  1. [Débutant] Lancer un .exe depuis un service windows.
    Par egautier18 dans le forum C#
    Réponses: 5
    Dernier message: 27/03/2014, 15h02
  2. Problème python lancer un .exe dans son service windows python
    Par leyer dans le forum Général Python
    Réponses: 1
    Dernier message: 02/04/2010, 04h07
  3. Lancer un exe à partir d'un service windows
    Par Eldaorn dans le forum Windows Forms
    Réponses: 1
    Dernier message: 02/04/2009, 13h37
  4. Créer un service Windows (pour exécuter une application)
    Par drinkmilk dans le forum Windows Serveur
    Réponses: 4
    Dernier message: 16/08/2007, 11h24
  5. Lancer mon exe au démarage de Windows
    Par zejo63 dans le forum Installation, Déploiement et Sécurité
    Réponses: 6
    Dernier message: 06/11/2005, 15h05

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