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 :

Problème avec ShellExecute


Sujet :

C++Builder

  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 41
    Par défaut Problème avec ShellExecute
    Bonjour,
    J'ai un problème avec la commande ShellExecute. Je veux décompresser un fichier TAR. Parfois l'extraction se fait correctement, parfois non.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    lCommand = ExtractFileDir(Application->ExeName) + "\\7z.exe";
    lParam = " x -y \"C:\\WINDOWS\\Temp\\" + fichierAExtraire + "\" -oC:\\WINDOWS\\Temp\\";
    ShellExecute(Application->Handle, "open", lCommand.c_str(), lParam.c_str(), NULL, SW_HIDE);
    Le chemin de l'éxecutable est correct. Il n'y a pas moyen de savoir si la commande s'est bien déroulé? La probabilité que ça ne fonctionne pas a l'air plus élevé quand je suis en mode débogage (quand j'exécute le programme depuis C++ builder 6) qu'en mode normal.
    Merci pour votre aide

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Pour contrôler le processus lancé, il faut passer par CreateProcess et non pas ShellExecute.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 41
    Par défaut
    Merci Mac LAK. J'ai testé avec le code ci dessous. Ca semble marcher si je ne suis pas en mode debug mais ça ne marche pas toujours en mode débug. Finalement, je ne suis pas sûr que le problème est réglé.
    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
    19
    20
    21
    22
    23
    24
    HANDLE hProcess;
            DWORD Code;
     
            AnsiString st = lCommand+ lParam;
     
            STARTUPINFO StUpInfo;
            PROCESS_INFORMATION ProcessInfo;
            StUpInfo.cb = sizeof(StUpInfo);
            StUpInfo.lpReserved = NULL;
            StUpInfo.lpDesktop = NULL;
            StUpInfo.lpTitle = NULL;
            StUpInfo.dwFlags = 0;
            StUpInfo.cbReserved2 = 0;
            StUpInfo.lpReserved2 = NULL;
            int res = CreateProcess(NULL, st.c_str(), NULL, NULL, false, DETACHED_PROCESS,NULL, NULL, &StUpInfo, &ProcessInfo);
            if(res){
                    WaitForSingleObject(ProcessInfo.hThread,INFINITE);
                    SetFocus();
            }
     
            hProcess =  ProcessInfo.hProcess;
            GetExitCodeProcess(hProcess,&Code);
     
           TerminateProcess(hProcess,Code);
    J'ai essayé avec la fonction aussi ShellExecuteEx et j'ai le même problème.

  4. #4
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Ceci donne quoi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    AnsiString lCommand , lParam  ; 
    lCommand = ExtractFileDir(Application->ExeName) + "\\7z.exe";
    lParam = " x -y C:\\WINDOWS\\Temp\\" + fichierAExtraire + " -o C:\\WINDOWS\\Temp\\";
     
    ShellExecute(Application->Handle, "open", lCommand.c_str(), lParam.c_str(), NULL, SW_HIDE);
    Sinon ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    AnsiString lCommand , lParam  ; 
    lCommand = ExtractFileDir(Application->ExeName) + "\\7z.exe";
    lParam = " x -y C:\\WINDOWS\\Temp\\" + fichierAExtraire + " -o  C:\\WINDOWS\\Temp\\*.*";
     
    ShellExecute(Application->Handle, "open", lCommand.c_str(),  lParam.c_str(), NULL, SW_HIDE);
    Vérifie aussi sur fichierAExtraire comporte bien d'extension !

  5. #5
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 41
    Par défaut
    Merci kmaniche pour ton aide. J'ai testé tes 2 exemples de code mais j'ai toujours le même problème. A mon avis ce n'est pas une erreur de syntaxe parce que ça marche parfois (en mode débug ou non)

  6. #6
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Dites-nous ce que te retourne :

  7. #7
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 41
    Par défaut
    lCommand = "C:\monprojet\res\7z.exe" (l'executable s'y trouve bien)
    lParam = " x -y "C:\WINDOWS\Temp\archive.tar" -oC:\WINDOWS\Temp\"

    Ca retourne toujours les mêmes valeurs, que ça marche ou non.

    Il y avait un autre ShellExecute pour extraire le tar d'un fichier bz2 avant cette étape de décompression du tar. J'ai utilisé un CreateProcess au lieu du ShellExecute et il semble que ça fonctionne! Merci !

  8. #8
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Citation Envoyé par roro8 Voir le message
    lCommand = "C:\monprojet\res\7z.exe" (l'executable s'y trouve bien)
    lParam = " x -y "C:\WINDOWS\Temp\archive.tar" -oC:\WINDOWS\Temp\"
    Citation Envoyé par roro8 Voir le message
    lCommand = "C:\monprojet\res\7z.exe" (l'executable s'y trouve bien)
    lParam = " x -y "C:\WINDOWS\Temp\archive.tar" -o C:\WINDOWS\Temp\""

  9. #9
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 41
    Par défaut
    Apparemment, ça marche tout le temps même s'il n'y a pas d'espace entre le -o et C: de "-oC:\WINDOWS\Temp\"
    Merci!

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

Discussions similaires

  1. Problème avec ShellExecute
    Par lou_delphdev dans le forum Web & réseau
    Réponses: 3
    Dernier message: 28/08/2007, 13h59
  2. Problème avec Shellexecute
    Par cincap dans le forum Composants VCL
    Réponses: 10
    Dernier message: 19/08/2007, 23h08
  3. [VBA]Problème avec ShellExecute()
    Par Sunchaser dans le forum SDK
    Réponses: 1
    Dernier message: 24/06/2007, 19h27
  4. Problème avec ShellExecute
    Par Xav++ dans le forum C++Builder
    Réponses: 5
    Dernier message: 29/05/2006, 13h58
  5. Problème avec ShellExecute
    Par SkYsO dans le forum Langage
    Réponses: 7
    Dernier message: 16/11/2005, 16h52

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