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

Windows Discussion :

[win32] Démarrer l'execution d'un programme avec paramètres


Sujet :

Windows

  1. #1
    Membre Expert
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Par défaut [win32] Démarrer l'execution d'un programme avec paramètres
    Bonjour à tous.

    Je souhaite que mon programme execute la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c:\WINDOWS\system32\rundll32.exe [...].dll,EntryPoint
    Je me doute qu'il faut utiliser la fonction ShellExecute, mais même avec l'aide du MSDN, je ne parviens pas à l'utiliser

    Question subsidiaire, comment rendre portable cette commande avec les systèmes windows 95 à XP ? Le répertoire n'est pas forcément le même, pas forcément sur c:, etc.

    Merci à vous.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 72
    Par défaut
    Tu peux essayer avec OpenProcess() .
    Pour avoir les répertoires qui vont bien, GetSystemDirectory(), GetWindowsDirectory() ou encore SHGetFolderPath() devraient faire l'affaire.

  3. #3
    Membre Expert
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Par défaut
    OpenProcess() inconnu chez moi. J'ai tenté avec CreateProcess(), mais j'ai une erreur assez étrange

    Merci pour les autres fonctions.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 72
    Par défaut
    Oui je pensais à CreateProcess()... sorry.
    Si tu nous mettais ton code on pourrait t'aider pour ton erreur étrange.

  5. #5
    Membre Expert
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Par défaut
    Oui, je voulais y travailler un peu avant

    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
    17
    18
    /* On charge le hook */
       STARTUPINFO si;
       PROCESS_INFORMATION pi;
       ZeroMemory( &si, sizeof(si) );
       si.cb = sizeof(si);
       ZeroMemory( &pi, sizeof(pi) );
       CreateProcess(
          (LPCTSTR)"c:\\WINDOWS\\system32\\rundll32.exe",
          (LPTSTR)RunDLL32Parametres.c_str(),
          NULL,
          NULL,
          false,
          NORMAL_PRIORITY_CLASS,
          NULL,
          (LPCTSTR)"c:\\WINDOWS\\system32",
          &si,
          &pi
       );
    CreateProcess() retourne True, mais rundll32.exe n'apparait pas dans le gestionnaire de processes (contrairement à si je le lançait manuellement).

    J'ai vérifier que RunDLL32Parametres.c_str() me retourne la bonne valeur. Si dans ma console j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rundll32.exe <RunDLL32Parametres.c_str()>
    avec <RunDLL32Parametres.c_str()> la valeur retournée de cette fonction, alors rundll se charge et tout fonctionne à merveille

    Mais je ne veux pas le faire manuellement

    Merci de votre aide.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Appelles CreateProcessA() au lieu de CreateProcessW(), ou utilise des chaînes TCHAR (utiliser TEXT("abc") ou _T("abc") au lieu de juste "abc").
    Et supprime-moi ces affreux casts.
    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 Expert
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Par défaut
    Merci de vous impliquer autant.
    Cela ne change rien (à priori).
    La fonction retourne toujours True mais sans lancer rundll :'(

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Tu pourrais me montrer un peu le chemin de la DLL que tu cherches à lancer ?

    Et puisque CreateProcess() réussit, faire un petit WaitForSingleObject() + GetExitCodeProcess() ?
    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
    Membre Expert
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Par défaut
    Cette DLL est c:\PROGRA~1\MICROS~3\MYPROJ~1\SCREEN~1\common\debug\DLLHOO~1.DLL
    Mais je m'excuse, il s'avère que je n'ai finalement pas besoin de lancer ce chargement, car il m'est difficile de savoir si la DLL a déjà été chargée (il vaut mieux éviter qu'elle le soit deux fois).

    Je laisse donc tomber.

    Merci tout de même. Par contre, si vous avez encore un peu de temps à perdre, je vous renvoie vers mon problème de static transparent : http://www.developpez.net/forums/sho...d.php?t=254047

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/05/2013, 14h29
  2. Appel d'un second programme avec paramètre
    Par atum25 dans le forum C++
    Réponses: 2
    Dernier message: 12/06/2012, 08h36
  3. Executer une procedure stockée avec paramètre
    Par SonnyFab dans le forum ASP.NET
    Réponses: 6
    Dernier message: 11/08/2010, 12h07
  4. Réponses: 6
    Dernier message: 27/07/2007, 18h38
  5. Réponses: 1
    Dernier message: 14/06/2007, 16h28

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