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 :

Exécuter un programme à partir du code C


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Par défaut Exécuter un programme à partir du code C
    Bonjour,

    J'aimerais bien pouvoir lancer d'après mon code C, un autre programme dont le chemin serait contenu dans un char.
    J'ai cherché de nombreuse heures après des solutions, mais je n'en ai pas trouvé qui fonctionnait vraiment :/

    Je me suis focalisé sur une aide de la FAQ -> Lien

    Mais je ne comprends pas grand-chose (ça ne fait pas longtemps que je code en C) et j'aimerais bien quelques petites explications :

    J'ai au début trouvé une variante de ShellExecute() proposé dans la FAQ qui me disait comme exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(NULL, NULL, L"C:\\WINDOWS\\system32\\notepad.exe", L"NOTEPAD", NULL, SW_SHOWNORMAL);
    Ok, mais pourquoi L"" ? Le code fonctionne mais bon, le L m'empêche de lui coller une variable ! L&fullPath ne fonctionnerai pas...

    Je suis ensuite tombé sur l'astuce du #define _T(x) L ## x

    Je suppose que le double # dans le préprocesseur fait coller le L à la variable x, en effet quand je remplace les L"" par _T("...") ça fonctionne, mais même soucis, si je fais _T(&fullPath), marche pas !

    Je suis passé à ShellExecuteEx, la j'ai un autre soucis. D'après le code que j'ai recopié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	SHELLEXECUTEINFO EI;
    	memset(&EI,0,sizeof(EI));
     
    	EI.cbSize = sizeof(EI);
    	EI.fMask = 0;
    	EI.hwnd = 0;
    	EI.lpVerb = "open";
    	EI.lpFile = "C:\\windows\\notepad.exe";
    	EI.lpParameters = "C:\\test.txt";
    	EI.lpDirectory = 0;
    	EI.nShow = SW_SHOW;
    	EI.hInstApp = 0;
     
    	ShellExecuteEx(&EI);
    Je reçois un charmant message :


    Après, découragé j'ai simplement copié/collé le code du CreateProcess() qui retourne tout simplement :
    0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0x00145764

    Est-ce qu'il y a donc moyen de lancer simplement un fichier ? (exécutable ou non) Pas besoin de pause du côté de mon programme ou autre, simplement le lancer.

    Merci.

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Par défaut
    Haaaa en effet, merci ça fonctionne ! Seul soucis, ça dépend du programme associé au fichier à lancer, m'enfin c'est pas grave.

    Merci

  4. #4
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Je n'ai pas compris le sens de cette phrase :
    Citation Envoyé par TempArea Voir le message
    Seul soucis, ça dépend du programme associé au fichier à lancer

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Par défaut
    Ben un fichier de tel type démarre tel programme, ici le ShellExecute fonctionne bien quand je lance des .exe, .mp3, .txt, ... mais le .c qui démarre VS2008 par exemple à quelque soucis, enfin j'ai su palier en bricolant un peu mais voilà quoi ^^

    Sinon c'est bien ce que je cherchait, merci

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 115
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Et quel est le bricolage en question?

    De plus, pourquoi cela ne marchait pas avec VS?
    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.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Par défaut
    j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include<string.h>    // pour le 
    char var[]="C:\WINDOWS\system32\notepad.exe"
     
    printf("votre parametre (fichier avec le chemain)  :");gets(para);
     
    strcat(var,para);
     
    system(var);
    ou vous pouver lancez le fichier avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    printf("entrer le fichier a executé (le chemain):");
    gets(var);
    system(var);
     
    //le fichier va executé avec le programe d'ouverture par defaut

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 115
    Billets dans le blog
    148
    Par défaut
    Je préfère la première forme, mais sans les erreurs de segmentation

    Pour faire simple, il faut faire ceci ( les tailles des élémentes à entrer par l'utilisateur sont limitées):
    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
     
    #include<string.h>    // pour le strcat
    {
        char var[100]="C:\\WINDOWS\\system32\\notepad.exe "; // Ici, le maximum ne pourra qu'être 100, nous avons déjà 32 caractères (33 avec le '\n'). L'espace à la fin simplifie le concaténation.
        char para[77]; // 77 car nous n'en voulons pas plus, sinon je vais dépasser la taille de var
        printf("votre parametre (fichier avec le chemain)  :");
     
        // gets(para); // Ceci est super dangereux, depuis longtemps cela est déprécié ( voir documenation et FAQ du site ). fgets est mieux.
    // De plus fgets peut limiter le nombre de caractère entré ( evitera des erreurs de segmentation si l'utilisateur tape de long texte ).
        fgets(para, 76, stdin); // 76 car la fonction ajoute le 77 caractères qui est un '\n'
        strcat(var,para);
     
        // Lancement du programme externe
        system(var);
    }
    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.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/05/2011, 18h22
  2. Exécuter une requête à partir du code
    Par 30avril1989 dans le forum VBA Access
    Réponses: 4
    Dernier message: 01/06/2010, 16h23
  3. Exécuter un programme à partir d'un service windows
    Par TekP@f dans le forum Windows Forms
    Réponses: 5
    Dernier message: 28/01/2009, 11h09
  4. Réponses: 3
    Dernier message: 21/07/2008, 16h15
  5. Exécuter un fichier à partir du code
    Par TheCool dans le forum ASP
    Réponses: 28
    Dernier message: 18/01/2005, 19h22

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