Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : CreateProcess: Pb de lancement d'un processus [ Système / Exécution ] (JeremyLecouvert)
|
CreateProcess: Pb de lancement d'un processus
le 25/04/2008 13:15:04

JeremyLecouvert
|
Bonjour tout le monde,
J'ai un pti souci avec la fonction CreateProcess, et je comprends pas où ça coince! Voilà le topo: mon appli est composée de 3 classes java et d'un "lanceur" développé en Delphi (BDS 2006). Chacun des 3 traitements est lancé par un appel à CreateProcess, mais l'un des 3 ne marche pas comme je veux, alors qu'il est construit de la même manière que les 2 autres. Voici mon code: Le problème, c'est qu'il génère à chaque fois une erreur, et le GetLastError me renvoie l'optimiste message « Opération réussie » ??? -> Je suppose que l'opération en question, c'est le plantage de la fonction .. sinon, j'vois pas ce qui a réussi !! En tout cas, le problème ne vient pas de la ligne de commande, parce qu'elle s'exécute bien quand je la lance directement dans le DOS. Du coup, je sais vraiment plus ce que je peux faire pour que ça marche, surtout que pour les 2 autres process ça marche nickel. Please, I need help ! En vous remerkiant .
|
|
|
|
Re : CreateProcess: Pb de lancement d'un processus
le 25/04/2008 13:19:08

JeremyLecouvert
|
Oups, désolé, pti pb de mise en forme sur le bout de code... procedure TBusinessTreatment.InsertBookmarks(pdf, csv: String); var cmd, classpath: String; si: STARTUPINFO; pi: PROCESS_INFORMATION; ret: Cardinal; pCmd: PAnsiChar; i: integer; begin //création du classpath java classpath:= ''; for i:=0 to Length(LIBS)-1 do classpath:= classpath + AppPath + LIBS[i]; cmd:= 'java -Xms16m -Xmx512m -cp "'+ classpath + '" "InsertBookmarks" "';
pCmd:= PAnsiChar(cmd + StringReplace(pdf, '\', '/',[rfReplaceAll]) + '" "' + StringReplace(csv, '\', '/',[rfReplaceAll]) + '"'); CreateProcess(nil, pCmd, nil, nil, False, 0, nil, nil, si, pi);
ret:= WaitForSingleObject(pi.hProcess, INFINITE); if ret=WAIT_FAILED then //échec de la fonction begin DisplayProcessError; //Fct d'affichage de l'erreur CloseProcess(pi); //Fermeture du process end else begin //process terminé (valeur de retour= WAIT_OBJECT_0) CloseInsertOperation(pdf, csv); CloseProcess(pi); end; //end if end;
... Voilà, c'est un peu mieux! 
|
|
|
|
Re : CreateProcess: Pb de lancement d'un processus
le 25/04/2008 13:32:58
|
|
Re : CreateProcess: Pb de lancement d'un processus
le 25/04/2008 13:41:33

JeremyLecouvert
|
C'est une procedure qui remplit un TMemo avec SysErrorMessage(GetLastError); et elle me dit "Opération réussie".
|
|
|
|
Re : CreateProcess: Pb de lancement d'un processus
le 26/04/2008 11:27:13

f0xi
Membre Club 
(Admin CS)
|
Réponse acceptée !
pi: PROCESS_INFORMATION; evite cela deja ... PI existe en delphi (renvois le nombre pi) mets plutot ProcInfo ou ProcNfo pour la commande il vaut mieux faire : Cmd : string; ... CreateProcess( nil, PChar(cmd), ...); et tu peu aussi faire : StringReplace(pdf+'" "'+csv, '\', '/',[rfReplaceAll])pour eviter 2 appels a StringReplace
|
|
|
|
Re : CreateProcess: Pb de lancement d'un processus
le 28/04/2008 12:35:18

JeremyLecouvert
|
Salut tout le monde, ça y est, ça marche... merci fOxi! Ceci dit, je suis pas sûr de savoir pourquoi !!  Pour le 'pi', je l'ai changé en 'pInfo'; ça ne créait pas de conflit, mais tu as raison, il vaut être rigoureux ça évite les soucis.. Pour les types PChar et PAnsiChar, je n'ai pas l'habitude de les utiliser; je ne sais pas si il y des différences selon si on utilise l'un ou l'autre. D'après l'aide Delphi, C'est équivalent sous Win32... Bizarrement, si j'exécute le code: CreateProcess(nil, PChar(cmd), nil, nil, False, 0, nil, nil, si, pInfo);
Ca marche nickel. Par contre, si je déclare un PChar et que je fais: pCmd:= PChar(cmd); CreateProcess(nil, PChar(cmd), nil, nil, False, 0, nil, nil, si, pInfo);
Cette fois, j'ai la même erreur que la dernière fois, ou l'erreur "accès refusé". Pourtant, je ne me sers même pas de 'pCmd'... on dirait que le simple fait de faire l'affectation modifie 'cmd'... Chais pas keskispass !!  Si quelqu'un peut apporter ses lumières à mon petit cerveau embrumé, je suis preneur !!  En tout cas, je valide ta réponse puisque mon pb est résolu .. @+
|
|
|
Classé sous : process, pi, nil, createprocess, classpath
|
CalendriCode
| | | L | M | M | J | V | S | D |
| | | | 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 | |
|
Téléchargements
Logiciels à télécharger sur le même thème :
|