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++Builder Discussion :

Lancer un programme


Sujet :

C++Builder

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Points : 242
    Points
    242
    Par défaut Lancer un programme
    Bonjour,
    je reviens.
    Pour lancer un programme, j'utilise :
    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
     
    void TfProgrammes::LancerProgramme(AnsiString asProg)
    {
      // Lancement du programme
      STARTUPINFO StartupInfo;
      ZeroMemory(&StartupInfo, sizeof(STARTUPINFO));
      StartupInfo.cb = sizeof(STARTUPINFO);
     
      PROCESS_INFORMATION  ProcessInfo;
      if(CreateProcess(asProg.c_str(), NULL, NULL, NULL,NULL,
    		NULL, NULL, NULL, &StartupInfo, &ProcessInfo))
      {
    	CloseHandle(ProcessInfo.hProcess);
    	CloseHandle(ProcessInfo.hThread);
      }
    }
    Cela fonctionne très bien avec la plupart des programmes, mais j'ai
    l'impression que pour les programmes écrits avec C++Builder il y a un os.
    J'obtiens une "Violation d'accès à l'adresse 00402BEF, etc".
    Cela se produit à l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application->CreateForm(__classid(TForm1), &Form1);
    Quelqu'un saurait-il ce qu'il faut modifier.
    J'ai essayé avec ShellExecute() et ça n'allait pas mieux.
    Merci
    Gilbert PASQUALINI

  2. #2
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Points : 81
    Points
    81
    Par défaut
    Bonjour,

    Je ne suis pas certain de comprendre ce que vous voulez faire. Vous voulez démarrez un programme externe dont le répertoire se trouve dans la variable asProg?

    du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    asProg = "c:\\monDossier\\monProgramme.exe";
    LancerProg(asProg);
    Si c'est ça,

    je fonctionne avec ShellExecute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute (NULL, "open", "c:\\Follow-It\\Follow.exe", 0, 0, SW_SHOWNORMAL);
    et cela fonctionne très bien.

    Pour ce qui est de votre code, je ne l'ai pas trop regarder. Si vous ne parvenez pas avec ShellExecute, je le regarderais en détails.

    antoine

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Points : 242
    Points
    242
    Par défaut
    C'est exact : je souhaite démarrer un programme dont le chemin
    est dans asProg.

    Je vais essayer la solution avec ShellExecute et je vous dirai ce qui
    se passe.
    Merci
    Gilbert PASQUALINI

  4. #4
    Membre chevronné Avatar de nirgal76
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2007
    Messages
    905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 905
    Points : 2 129
    Points
    2 129
    Par défaut
    faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
    après le CreateProcess histoire d'attendre la fin de l'application avant de fermer ses handles ?

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Points : 242
    Points
    242
    Par défaut
    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int longueur = asProg.Length();
      char* cNom = new char[longueur + 1];
     
      strcpy(cNom, asProg.c_str());
      ShellExecute (NULL, "open", cNom, 0, 0, SW_SHOWNORMAL);
    J'ai toujours le même problème.
    Le programme, apparemment est lancé puisque le gestionnaire de tâches le liste, mais il prend la totalité des ressources et n'est pas visible.

    Pour répondre à nirgal76, ce programmes a pourv but de lancer un certains
    nombres d'autres programmes qui vont travailler en tâches de fond. Il n'y a
    alors aucune raison d'attendre la fin d'un programme pour lancer le suivant.
    Gilbert PASQUALINI

  6. #6
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Points : 81
    Points
    81
    Par défaut
    Le problème semble venir du programme que vous démarrer et non de la command ShellExecute.

    Essayez comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    AnsiString asProg = "C:\\WINDOWS\\system32\\Notepad.exe";
     
    ShellExecute(NULL, "open", asProg.c_str(),0,0,SW_SHOWNORMAL);
    Le bloc-note devrait s'ouvrir normalement. Ce qui me laisse croire que le problème vient de ce que vous tenter d'exécuter (dans ce cas-ci Notepad.exe).

    J'ai essayé avec le strcpy(...).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    AnsiString asProg = "C:\\WINDOWS\\system32\\Notepad.exe";
    char *cNom;
    strcpy(cNom,asProg.c_str());
     
    ShellExecute(NULL, "open", cNom,0,0,SW_SHOWNORMAL);
    Et j'avais une exeception. Je n'ai pas compris ce qui causait ce problème, mais avec asProg.c_str() tout devient fonctionnel (enfin, chez nous).

    antoine


    EDIT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    AnsiString asProg = "C:\\WINDOWS\\system32\\Notepad.exe";
    int longueur = asProg.Length();
     
    char* cNom = new char[longueur + 1];
    strcpy(cNom,asProg.c_str());
    ShellExecute(NULL, "open", cNom,0,0,SW_SHOWNORMAL);
    De cette façon, tout fonctionne, comme vous l'aviez codé...

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Points : 242
    Points
    242
    Par défaut
    Si je lance Notepad.exe, ou même d'autres programmes
    cela fonctionne très bien.

    Le problème vient avec certains programmes.
    Ces mêmes certains programmes se lancent très bien
    en faisant un double-Click sur leur fichier ou en les mettant
    dans le menu Démarrage de Window-VISTA.

    Le mystère reste entier.
    Gilbert PASQUALINI

  8. #8
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Si tu es sous Vista, peut-être que le problème viens du fait que ton programme n'as pas les droit pour en lancer certain autre, essaye en lançant ton programme en tant qu'administrateur
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Points : 242
    Points
    242
    Par défaut
    Je pense qu'il ne s'agit pas de droits. Le programme est lancé,
    mais il s'arrête avant d'être réellement en état de fonctionner
    correctement et utilise alors toutes les ressources de la CPU.
    Gilbert PASQUALINI

  10. #10
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Points : 81
    Points
    81
    Par défaut
    Bonjour,

    Je me demandais si on pouvait avoir des précisions sur le programme. En fait, je ne sais pas quel informations pourrait nous aider puisque je n'ai aucune idée de ce qui ne pourrait ne pas fonctionner, mais peut-être que ça aidera quelqu'un d'autre à t'aider

    Je suis un peut nazz en prog. désolé.

    Antoine

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Points : 242
    Points
    242
    Par défaut
    Bonsoir,
    je ne sais pas si c'est lié au fait que les 2 programmes
    que je ne parviens pas à lancer ont plusieurs "Form". J'ai
    l'impression que la première est lancée mais pas les suivantes.
    Gilbert PASQUALINI

Discussions similaires

  1. Lancer un programme a la Fermeture de Windows
    Par sali dans le forum Windows
    Réponses: 2
    Dernier message: 01/07/2004, 22h54
  2. [LG]lancer un programme extérieur
    Par dsr57 dans le forum Langage
    Réponses: 3
    Dernier message: 07/01/2004, 18h41
  3. Lancer un programme au démarrage
    Par ludo_7 dans le forum Windows
    Réponses: 7
    Dernier message: 09/10/2003, 16h29
  4. Lancer un programme, mais sur une autre machine
    Par GOUGOU1 dans le forum Réseau
    Réponses: 12
    Dernier message: 08/12/2002, 20h36
  5. Réponses: 8
    Dernier message: 05/06/2002, 11h55

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