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 :

Lancement d'une application externe dans un programme C++


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 157
    Points : 67
    Points
    67
    Par défaut Lancement d'une application externe dans un programme C++
    Bonjour

    Je fais un test pour lancer un exécutable à partir de mon programme C++ développé sous Visual Studio 2013. J'essaye de le faire de deux manière avec la fonction system("start ...) pas la plus safe et avec un shellExecute.

    1. Mon problème c'est qu'avec la fonction system
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        system("start C:\\MonApp.exe");
    Mon application (MonApp.exe) ne se lance pas en exécutant à partir de Visual STUDIO (mode Debug ou Release) "Violation d’accès". mais par contre se lance en exécutant directement l’exécutable de mon programme compilé (prog_test.exe). Est ce qu'il y' aurait des paramètres à modifier dans Visual studio pour avoir un comportement équivalent.

    2. En utilisant la fonction ShellExecute j'ai un code retour indiquant que c'est failed
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       	HINSTANCE ret = ShellExecute(0, LPWSTR("open"), LPWSTR("C:\\MonAPP.exe"), NULL, NULL, SW_SHOW);
            // ret vaut 2 ==> la fonction ShellExecute ==> code erreur
    Mon exécutable ne se lance pas non plus. Pourriez vous m'indiquer si vous avez pu identifier mes erreur dans les deux type d'appel.

    Merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 171
    Points : 12 293
    Points
    12 293
    Par défaut
    On oublie la méthode avec "system", c'est un nid à bugs et à trous de sécurité.

    Pour la version "ShellExecute", vous castez une chaine en UNICODE UTF-16 (le sens de W dans LPWSTR) une chaine de caractère qui à de bonne chance d'être en ASCII ou UTF8, utilisez la MACRO "L" si vous insistez à vouloir mettre des valeurs en dure.

    La manière la plus direct (sous Windows, non portable) pour lancer un exécutable, c'est CreateProcess :
    https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 157
    Points : 67
    Points
    67
    Par défaut
    Merci c'était effectivement un problème de cast et c'est juste un exemple que j'ai présenté. Dans mon vrai programme les paramètre de ShellExecute sont des variables qui sont définis par d'autres fonction du programme.

    Par contre j'ai toujours le problème ou mon application se lance par l’exécution de mon programme directement mais j'ai une violation d'accès en exécutant le programme par visual studio 2013 (en réalité j'ai plutôt besoin de cette deuxième manière). Je pense que c'est peut être un problème de paramétrage de Visual Studio mais je vois pas trop lequel ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 171
    Points : 12 293
    Points
    12 293
    Par défaut
    Merci c'était effectivement un problème de cast et c'est juste un exemple que j'ai présenté. Dans mon vrai programme les paramètre de ShellExecute sont des variables qui sont définis par d'autres fonction du programme.
    Si c'est pas des valeurs en dûr mais des variables mais que vous devez toujours faire les cast, c'est que vous avez merdé quelque-part.

    Je pense que c'est peut être un problème de paramétrage de Visual Studio mais je vois pas trop lequel ?
    Moi, je penche plus sur le fait que "MonAPP.exe" est codé avec les pieds et quand changeant le contexte d'exécution (en particulier le working directory), il part en sucette.

    Pourquoi ne pas indiquer que vous voulez déboguer dans un nouveau VS le programme qui vient de planté ?
    Si vous avez compilez "MonAPP.exe" sur la machine, VS trouvera automatiquement où sont les sources si vous avez généré les informations de debugging lors de la compilation.

Discussions similaires

  1. Réponses: 5
    Dernier message: 31/08/2007, 09h00
  2. lancer une application externe dans une fenêtre
    Par lilivounet dans le forum Windows
    Réponses: 0
    Dernier message: 29/07/2007, 16h03
  3. [VB.NET] Comment lancer une application externe dans ma Form
    Par afdmats dans le forum Windows Forms
    Réponses: 1
    Dernier message: 03/10/2006, 15h27
  4. Réponses: 3
    Dernier message: 08/07/2006, 19h59
  5. [VB6] Lancement d'une application externe
    Par ahouba dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 31/05/2006, 15h42

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