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

Langage Delphi Discussion :

[CreateProcess] Multiples paramètres / Retour


Sujet :

Langage Delphi

  1. #1
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut [CreateProcess] Multiples paramètres / Retour
    Bonjour,

    Avec CreateProcess, je dois exécuter plusieurs actions sur un exécutable sur lequel je dois passer des paramètres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MonEXE "Source" "Destination"
    Un des problèmes c'est que seul le dernier paramètre est pris en compte et pas le premier, ce qui fait que mon application ne fait pas ce qu'elle doit faire

    J'ai bien vérifié, dans sParams, j'ai mes deux paramètres.



    Ci dessous mon code

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    function ConvertTbHF(ListTbHF : TListTableHF;ProgressBar : TProgressBar;Memo : TMemo) : Boolean;
    var
      i : integer;
      sDestName : String;
      sTableName : String;
      sTmp : String;
      sParams : String;
    begin
      Result := False;
      for i := 0 to ListTbHF.Count - 1 do
      begin
        sTableName := ListTbHF.Items[i].TableName + '.fic';
        sDestName  := ListTbHF.Items[i].TableName + '.xml';
        sTmp := 'Convertion : ' + ListTbHF.Items[i].TableName;
     
        sParams := AnsiQuotedStr(GPATHSOURCE + sTableName,'"') + #32 + AnsiQuotedStr(GPATHFILETMP + sDestName,'"');
        case ExecuteAndWait(GFILEHFTOXML,sParams) of
          CRESULTOK: begin
            AddToMemo(Memo, sTmp + ' >> OK');
            Result := True;
          end;
          CFILENOTFOUND : AddToMemo(Memo,sTmp + ' >> Fichier non trouvé');
          CHFERROR      : AddToMemo(Memo,sTmp + ' >> Impossible de convertir la table');
          CCANNOTOPENHF : AddToMemo(Memo,sTmp + ' >> Erreur d''ouverture de la table');
          CCONVERTERROR : AddToMemo(Memo,sTmp + ' >> Erreur lors de la convertion');
          else begin
            AddToMemo(Memo,sTmp + ' >> Erreur inconnue');
            Result := False;
          end;
        end;
        ProgressBar.Position := i * 100 Div (ListTbHF.Count - 1);
        Application.ProcessMessages;
      end;
    end;
    et

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    function ExecuteAndWait (sExeName : String;Param : String) : Integer;
    Var  StartInfo   : TStartupInfo;
         ProcessInfo : TProcessInformation;
         Fin         : Boolean;
         ExitCode    : Cardinal;
    begin
      Result := -1;
      { Mise à zéro de la structure StartInfo }
      FillChar(StartInfo,SizeOf(StartInfo),#0);
      { Seule la taille est renseignée, toutes les autres options }
      { laissées à zéro prendront les valeurs par défaut }
      StartInfo.cb     := SizeOf(StartInfo);
     
      { Lancement de la ligne de commande }
      If CreateProcess(PChar(sExeName),PChar(Param) ,nil , Nil, False,
                    0, Nil, Nil, StartInfo,ProcessInfo) Then
      Begin
        { L'application est bien lancée, on va en attendre la fin }
        { ProcessInfo.hProcess contient le handle du process principal de l'application }
        Fin:=False;
        Repeat
          { On attend la fin de l'application }
          Case WaitForSingleObject(ProcessInfo.hProcess, 200)Of
            WAIT_OBJECT_0 :Fin:=True; { L'application est terminée, on sort }
            WAIT_TIMEOUT  :;          { elle n'est pas terminée, on continue d'attendre }
          End;
          { Mise à jour de la fenêtre pour que l'application ne paraisse pas bloquée. }
          Application.ProcessMessages;
        Until Fin;
     
        GetExitCodeProcess(ProcessInfo.hProcess,ExitCode);
        Result := ExitCode;
        { C'est fini }
      End
      Else RaiseLastOSError;
    end;
    2em soucis (toujours avec CreateProcess), dans la fonction ExecuteAndWait, je n'ai pas le retour des erreurs que l'application devrait me retourner.

    Merci
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Les Erreurs sont retournés par le Code de Sortie ou par le Canal d'Erreur(opérateur >> en ligne de commande au lieu de > qui donne le Canal de Sortie)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Pour les erreurs, je ne sais pas, c'est un programme fait en Windev, et je ne connais pas son fonctionnement au niveau des entrées/sorties

    Dans le code source du programme windev, il y a des Renvoyer XXX.

    Sinon, le problème prioritaire reste quand même le passage de paramètres qui foire
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Le Programme fonctionne-t-il correctement déjà en ligne de commande (par un CMD à la main) ?
    Peut-être qu'il lui faut d'autres paramètres ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Le programme fonctionne bien si je fais un batch/ligne de commande.
    Enfin bon, j'ai trouvé une solution en rajoutant un espace devant les paramètres et cela focntionne correctement (Normal ou pas ? )
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Etrange, un espace en plus, c'est comme si il s'attendait à un paramètre genre le répertoire de démarrage, est-ce que windev détecte si c'est un passage par CMD ou par Kernel32 ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Etrange, un espace en plus, c'est comme si il s'attendait à un paramètre genre le répertoire de démarrage, est-ce que windev détecte si c'est un passage par CMD ou par Kernel32 ...
    Oui, c'est bizarre, comme réaction si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      sParam := Valeur1 + ' ' + Valeur2;
    J'ai une erreur (fichier de log du prog windev) comme quoi il n'a pas pu traiter le fichier Valeur2 en source (alors qu'il devrait traiter le fichier Valeur1 et le copier dans Valeur2)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sParam := ' ' + Valeur1 + ' ' + Valeur2;
    La pas de soucis, c'est comme si je faisais MonExe Valeur1 Valeur2 directement en ligne de commande.

    Pour les retours je ne sais pas si les erreurs sont bien retournées (ca me renvoi 0 et c'est cette valeur que j'attend pour me dire que ca c'est bien passé).
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  8. #8
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 188
    Points : 113
    Points
    113
    Par défaut
    éh éh ! qqs années après, j'ai le même problème ! résolu en mettant un espace devant .

    Merci je n'y aurais jamais pensé :p

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

Discussions similaires

  1. Impression multiple paramétrable
    Par Labinouse dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 03/06/2014, 16h20
  2. Appel procédure PL/SQL avec Hibernate avec paramètre retour OUT
    Par rom292 dans le forum Persistance des données
    Réponses: 2
    Dernier message: 02/06/2012, 20h15
  3. Réponses: 11
    Dernier message: 01/12/2011, 15h53
  4. [CR8] Champs de paramètres à valeurs multiples
    Par Nout dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/02/2005, 16h51
  5. CreateProcess + paramètres passé
    Par obione dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 20/03/2003, 17h25

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