CreateProcess : bug ! - Delphi/Pascal - Programmation
Marsh Posté le 09-11-2005 à 22:19:55
HERIBERT a écrit : Pourquoi ce bout de code ne fonctionne-t-il pas ? |
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
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"
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 |
OK pr RaiseLastError : je vais voir ce que ça donne.
Pour les guillements : il ne tient pas compte des espaces dans les vartiables string
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...
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
Marsh Posté le 10-11-2005 à 09:45:04
Nom_F_Consult := '"C:\Documents and Settings\UTILISATEUR\Mes Documents\Répertoire\BASE.Mdb"';
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.
Marsh Posté le 10-11-2005 à 11:08:50
T'as mis des " ou des doubles ' ? (c'est des " qu'il faut)
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"';
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.
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. |
Effectivement : ça marche de la façon que tu décris. Ca ne devrait pas fonctionner, mais... ça fonctionne pourtant
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...
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