begin process at 2010 02 10 09:56:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Système

 > 

Exécution

 > 

CreateProcess: Pb de lancement d'un processus


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

CreateProcess: Pb de lancement d'un processus

vendredi 25 avril 2008 à 13:15:04 | CreateProcess: Pb de lancement d'un processus

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:


Zone de Texte: 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;

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 .

vendredi 25 avril 2008 à 13:19:08 | Re : CreateProcess: Pb de lancement d'un processus

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!
vendredi 25 avril 2008 à 13:32:58 | Re : CreateProcess: Pb de lancement d'un processus

cirec

Membre Club Administrateur CodeS-SourceS
Salut,
et "DisplayProcessError" te dit quoi

 
@+
Cirec

vendredi 25 avril 2008 à 13:41:33 | Re : CreateProcess: Pb de lancement d'un processus

JeremyLecouvert

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

f0xi

Membre Club Administrateur CodeS-SourceS
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




lundi 28 avril 2008 à 12:35:18 | Re : CreateProcess: Pb de lancement d'un processus

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 ..
@+


Cette discussion est classée dans : process, pi, nil, createprocess, classpath


Répondre à ce message

Sujets en rapport avec ce message

String et Array [ par xionoxid ] Bonjour C'est une très bete question : à propos des String et Array je voudrais enregistrer la valeur de "paramstr(1); " dans path pour le faire execu Process group [ par User8 ] Bonjour tout le monde, Je rencontre actuellement un problème pour la suppression de processus. Je serai donc fort intéressé par un petit coup de main. PB avec Mapisendmail [ par fbalien ] Bonjourj'ai fait un soft de création de compte user qui une fois le compte créé généré un mail pour indiquer les différentes informationsJ'utilise don Problème ShellExecute [ par luluthefirst ] Bonjour à tous, voilà j'ai importer ShellApi dans uses et ensuite je met le code ShellExecuteShellExecute(handle,'open',textbox1.text,nil,nil,SW_MAXIM Generer un texte avec un ComboBox [ par emirej ] Bonjour un tous, j'essaye de maitriser les ComboBox mais pas évident, en effet m'ont problème m'empêche de créer l'exécutable =\ Je possède une form, ouvrir une nouvelle page internet [ par rayssec ] bonjourj utilise la commande  ShellExecute(0,'open','http://....',nil,nil, SW_SHOWNORMAL); pourouvrir  une page internet sur IE mais cette page s'ouvr What is OLE in-process server COM DLL ? [ par simonpelloquin ] Bonjour,Pour essayer de répondre à mon précédent post relatif à une association d'icône sans passer par la base de registre, j'ai rouvé ça dans le Win Passage de nil comme paramètre var [ par rt15 ] Salut,Prenons par exemple la fonction ImageRvaToVa.Cette fonction est définie comme suit dans ImageHlp :function ImageRvaToVa(NtHeaders: PIm Handle-savonnette à la c.. [ par Caribensila ] Bonjour,Je fais un bench et j'ai besoin du gestionnaire des tâches de Windows pour contrôler certains trucs.Je me suis dit, confiant (et décontracté a


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,515 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales