CreateProcess : bug !

CreateProcess : bug ! - Delphi/Pascal - Programmation

Marsh Posté le 09-11-2005 à 10:20:19    

Pourquoi ce bout de code ne fonctionne-t-il pas ?
 
 
 
  FillChar(Startupinfo,Sizeof(TStartupinfo),0);
  Startupinfo.cb:=Sizeof(TStartupInfo);
  Retour := CreateProcess(PChar(Processus),
                         PChar(Nom_F_Consult),
    nil,
                         nil,
                         false,
                         normal_priority_class,
                         nil,
                         PChar(Rep),
                        Startupinfo,ProcessInfo);
 
Où les variables string sont :
 
 Rep :=           'C:\Documents and Settings\UTILISATEUR\Mes Documents\Répertoire';
  Processus :=     'C:\Program Files\Microsoft Office\Office10\Msaccess.EXE';
  Nom_F_Consult := 'C:\Documents and Settings\UTILISATEUR\Mes Documents\Répertoire\BASE.Mdb';

 
Access se lance mais ne semble pas recevoir le nom du fichier (Nom_F_Consult) en paramètre !
 
Merci ;)

Reply

Marsh Posté le 09-11-2005 à 10:20:19   

Reply

Marsh Posté le 09-11-2005 à 22:19:55    

HERIBERT a écrit :

Pourquoi ce bout de code ne fonctionne-t-il pas ?
 
 
 
  FillChar(Startupinfo,Sizeof(TStartupinfo),0);
  Startupinfo.cb:=Sizeof(TStartupInfo);
  Retour := CreateProcess(PChar(Processus),
                         PChar(Nom_F_Consult),
    nil,
                         nil,
                         false,
                         normal_priority_class,
                         nil,
                         PChar(Rep),
                        Startupinfo,ProcessInfo);
 
Où les variables string sont :
 
 Rep :=           'C:\Documents and Settings\UTILISATEUR\Mes Documents\Répertoire';
  Processus :=     'C:\Program Files\Microsoft Office\Office10\Msaccess.EXE';
  Nom_F_Consult := 'C:\Documents and Settings\UTILISATEUR\Mes Documents\Répertoire\BASE.Mdb';

 
Access se lance mais ne semble pas recevoir le nom du fichier (Nom_F_Consult) en paramètre !
 
Merci ;)


 :bounce:

Reply

Marsh Posté le 09-11-2005 à 22:41:28    

"ne fonctionne pas"... au pif, essaie de regarder la valeur de retour et de faire un RaiseLastOSError pour voir quoi :o
Sinon je mettrais des guillemets autour des éléments du paramètre "command line", parce qu'avec les espaces il doit essayer de lancer "C:\Documents" en lui passant comme paramètres "and Settings\UTILISATEUR\Mes Documents\Répertoire\BASE.Mdb"


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 09-11-2005 à 23:35:11    

antp a écrit :

"ne fonctionne pas"... au pif, essaie de regarder la valeur de retour et de faire un RaiseLastOSError pour voir quoi :o
Sinon je mettrais des guillemets autour des éléments du paramètre "command line", parce qu'avec les espaces il doit essayer de lancer "C:\Documents" en lui passant comme paramètres "and Settings\UTILISATEUR\Mes Documents\Répertoire\BASE.Mdb"


OK pr RaiseLastError : je vais voir ce que ça donne.  
 
Pour les guillements : il ne tient pas compte des espaces dans les vartiables string :??:

Reply

Marsh Posté le 09-11-2005 à 23:51:39    

Dans la variable string non, mais dans les lignes commandes oui. CreateProcess reçoit une seule chaîne contenant toute la ligne de commande, il peut pas deviner où finit le fichier à lancer et où commencent les paramètres...

Message cité 1 fois
Message édité par antp le 09-11-2005 à 23:51:49

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-11-2005 à 01:29:16    

antp a écrit :

Dans la variable string non, mais dans les lignes commandes oui. CreateProcess reçoit une seule chaîne contenant toute la ligne de commande, il peut pas deviner où finit le fichier à lancer et où commencent les paramètres...


Effectivement : Access ne peut trouver le fichier "and.Mdb" : "and" faisant partie de la ligne de commande: c:\Documents and Settings\...
 
Je sors comment, de ce bug :/


Message édité par HERIBERT le 10-11-2005 à 01:29:33
Reply

Marsh Posté le 10-11-2005 à 09:45:04    

Nom_F_Consult := '"C:\Documents and Settings\UTILISATEUR\Mes Documents\Répertoire\BASE.Mdb"';


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-11-2005 à 10:33:27    

antp a écrit :

Nom_F_Consult := '"C:\Documents and Settings\UTILISATEUR\Mes Documents\Répertoire\BASE.Mdb"';


Réponse : Code Erreur 3. Chemin non trouvé ... F_Consult est bien formaté comme exposé plus haut :( C'est peut-être un paramètre à Access qui fait défaut ? Du genre /bla-bla ? Je vais les chercher.

Reply

Marsh Posté le 10-11-2005 à 11:08:50    

T'as mis des " ou des doubles ' ? (c'est des " qu'il faut)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-11-2005 à 11:34:47    

antp a écrit :

T'as mis des " ou des doubles ' ? (c'est des " qu'il faut)


Exactement ceci:
  Nom_F_Consult := '"C:\Documents and Settings\UTILISATEUR\Mes Documents\Base\Consult.Mdb"';  

Reply

Marsh Posté le 10-11-2005 à 11:34:47   

Reply

Marsh Posté le 10-11-2005 à 13:46:40    

En regardant du code que j'avais fait où j'utilisais CreateProcess, je vois que le premier param n'est pas utile si on fournit une ligne de commande complète en second param.
Tu peux mettre nil en premier param, et mettre juste le mdb (ou access.exe suivi du mdb) en second param.

Message cité 1 fois
Message édité par antp le 10-11-2005 à 13:48:05

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 11-11-2005 à 11:18:27    

antp a écrit :

En regardant du code que j'avais fait où j'utilisais CreateProcess, je vois que le premier param n'est pas utile si on fournit une ligne de commande complète en second param.
Tu peux mettre nil en premier param, et mettre juste le mdb (ou access.exe suivi du mdb) en second param.


Effectivement : ça marche de la façon que tu décris. Ca ne devrait pas fonctionner, mais... ça fonctionne pourtant  :sarcastic:  
 
Ca me rappelle une API de gestion de fichier (lecture) sur laquelle je plantais. Un source m'est alors communiqué en exemple. Au lieu d'un pointeur sur je ne sais plus quel tampon, c'est... l'identificateur de la variable qu'il fallait indiquer, contrairement à la doc des API :??: J'ose pas dire "bug du compilo", mais ça y ressemble...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed