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 émérite
    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 : 37
    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
    Points : 2 466
    Points
    2 466
    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 régulier
    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
    Points : 77
    Points
    77
    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 émérite
    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 : 37
    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
    Points : 2 466
    Points
    2 466
    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 régulier
    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
    Points : 77
    Points
    77
    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 émérite
    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 : 37
    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
    Points : 2 466
    Points
    2 466
    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 sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    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.

  7. #7
    Membre émérite
    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 : 37
    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
    Points : 2 466
    Points
    2 466
    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 sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    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() ?

  9. #9
    Membre émérite
    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 : 37
    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
    Points : 2 466
    Points
    2 466
    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