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 �clair�
    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
    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

  2. #2
    Membre confirm�
    Profil pro
    �tudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    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 �clair�
    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
    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

  4. #4
    Membre tr�s actif Avatar de nirgal76
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Septembre 2007
    Messages
    924
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 924
    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 �clair�
    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
    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.

  6. #6
    Membre confirm�
    Profil pro
    �tudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    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 �clair�
    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
    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.

  8. #8
    Expert confirm�

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    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

  9. #9
    Membre �clair�
    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
    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.

  10. #10
    Membre confirm�
    Profil pro
    �tudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    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 �clair�
    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
    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.

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