Erreur E/S 123. [Résolu]

Signaler
Messages postés
23
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
30 juin 2006
-
Messages postés
23
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
30 juin 2006
-
Bonjour à tous,

J'aimerais avoir vos avis sur ce petit pb surement très bête mais chiant pour un amateur comme moi...

Je développe des petits programmes au boulot pour me faciliter la vie et celle de mon équipe, et je mets les exécutables à disposition de tous sur le réseau interne de la boîte.

Le pb est que quand j'introduis un select directory dans ces programmes, ça marche très bien chez moi, mais moins bien quand ils sont lancés du réseau...
Là où ça coince, et où je m'arrache les cheveux, c'est que pour certains programmes ça fonctionne, pour d'autres non, et ça dépend aussi du poste à partir duquel on les lance !!!

C'est un peu la quatrième dimension.

Bref, si vous avez une astuce de Sioux, je suis preneur !

Merci, bonne journée à tous !

Thomas.

13 réponses

Messages postés
1721
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
30 août 2020
3
Ouaip, un bon



ChDir(ExtractFilePath(Application.ExeName));



Je pensais moi aussi à un truc dans le genre.

Parce que des fois, à force de se balader de répertoire en répertoire,
à coup d'OpenDialog et de SelectDirectory, et à moins d'avoir pensé à
semer quelques caillous, lol...



Bonne prog'



japee
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
Bonjour

Quelques idées en passant :

1 - Si tu utilises un lecteur réseau, vérifie qu'il soit définit de façon identique sur tous les postes. Par exemple, si tu as un lecteur U: définit comme étant le répertoire \users sur un serveur X, il faut que tous les autres postes définissent à l'identique ce lecteur réseau U:

2 - Les utilisateurs ont-ils tous les mêmes droits ? Un répertoire accessible d'un poste ne l'est peut être pas depuis un autre.

3 - Au lieu de faire un select directory, ne peux tu pas laisser l'utilisateur choisir lui même le bon répertoire par un dialogbox ?

Cordialement.
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
5
Hello,



Donne nous un morceau de code on le probleme se produit.

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
Messages postés
23
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
30 juin 2006

Merci pour ces premiers éléments de réponse...

Pour répondre à WhiteHippo en premier, et après vérif, le lecteur réseau est bien défini de la même façon sur tous les postes. Ensuite toute l'équipe a les mêmes droits, et même moi en le lançant de mon poste mais en chercher l'exécutable sur le réseau ça merde.

Voici la procédure qui plante, je vous la mets juste au cas où mais y'a pas grand chose de plus simple...

procedure TForm_Main.BitBtn_search_concClick(Sender: TObject);

var
Dir : string;

begin {BitBtn_Search_conc}

Dir := 'C:\' ;
if SelectDirectory(Dir, [SdAllowCreate, SdPerformCreate, SdPrompt], SELDIRHELP)
then Edit_Output1.Text := Dir ;

end ; {BitBtn_Search_conc}

SELDIRHELP est déclaré en constante = 1000 dans l'interface de l'unité principale, Edit_Output1 est un bête TEdit qui retourne le dossier sélectionné.

Je pensais que c'était dû au fait que je déclare le string Dir égal au lecteur C par défaut, et comme on exécute du réseau ça lui plaît pas, mais pourquoi alors dans certains programmes ça marche et dans d'autres pas ?

J'attends votre aide, merci pour votre réactivité !
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
Je ne vois pas bien le probleme ! J'ai essayé chez moi pas de plantage même avec un appel de l'executable situé sur un autre poste et une création de repertoire sur le poste distant.

Quel est le système d'exploitation, XP ? Si oui, comment êtes vous tous connectés ? ( en tant qu'utilisateur simple, ou avec pouvoir, en tant qu'administrateur .... )

N.B. Je te conseillerai cependant d'initialiser ta variable dire comme suit :
Dir := paramstr(0);
Cela pour avoir comme repertoire initial le repertoire d'où l'executable est lancé.

Cordialement.
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
J'oubliais, ce qui serait bien également c'est de gérer le cas ou le selectdirectory renvoie false en affichant un message à l'utilisateur et en fixant un repertoire par défaut dans le Edit_Output1.

Cela permettra de savoir si le nom de repertoire est correct ou pas.

A tout hasard, des imprimantes reseaux ne seraient pas declarées ? si c'est le cas, il faut vérifier qu'il y a une imprimante par defaut de definie et que la ou les imprimantes reseaux sont bien accessibles.

Cordialement.
Messages postés
23
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
30 juin 2006

Du nouveau, du nouveau !!!

Je vous explique d'abord comment je fonctionne :

Je développe de mon poste, mes sources sont sur mon HDD et je complie de là pour vérifier que tout est OK
Ensuite je vais copier tous les fichiers (sources + exe) sur le réseau à un emplacement accessible uniquement par les personnes de mon équipe.
Enfin, je crée un raccourci de chaque exe, raccourci que j'enregistre dans un dossier "Delphi Prog" sur le réseau lui aussi.

J'ai ré-essayé sur un programme qui marchait bien du réseau, et voilà ce que j'ai observé :

Je lance l'exe du réseau, j'appuie sur le bouton qui lance le SelectDirectory, et là tout est OK, j'ai bien ma boite de dialogue et le lecteur par réseau est le C:, quelque soit le poste d'où je lance.
Par contre, si je recompile mes sources directement sur le réseau, là ensuite quand je relance l'exe ça ne marche plus (erreur E/S 123.)
Du coup je recompile de mon HDD, je copie l'ensemble (sources + exe) et je colle tout ça sur le réseau (en écrasant les anciens fichiers)...... Et ben ça marche toujours pas !

Et maintenant il marche plus.

Du coup je vais réessayer demain (après un reboot du PC et une bonne nuit de dodo) et je vous tiens au courant... Voilà, si ça vous donne des pistes ou des idées, n'hésitez pas.

Merci pour vos efforts !

Thomas.
Messages postés
23
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
30 juin 2006

Bon ben rien de nouveau en fait...

J'ai initialisé ma variable Dir en paramstr(0), mais ça n'a pas amélioré le truc, j'ai essayé d'appeler IOResult à la fin de la procédure pour réinitialiser ma variable d'E/S, comme suggéré dans l'aide Delphi, pas d'amélioration non plus...

Et je sais toujours pas à quoi correspond une erreur E/S 123. !!!!!!!!

Je m'en remets à vous, merci pour vos efforts !

Thomas.
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
Bonjour


Peux tu nous détailler exactement, ce que tu fais dès que tu appuyes sur le bouton qui lance le SelectDirectory.
Nous dire le répertoire par défaut, celui que tu selectionnes ou que tu crées, etc...

Autre chose, si tu valides juste le dialog box sans rien modifier, as tu l'erreur ?

Cordialement.
Messages postés
23
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
30 juin 2006

Et bien en fait, je fais rien après avoir appuyé sur le bouton qui lance le Selectdirectory, parce que j'ai ce message d'erreur Windows "Erreur E/S 123." qui arrive tout de suite à la place de la Dialog Box !

Il me fait pas perdre la main, si j'appuie sur le OK du message d'erreur je récupère la main sur mon interface et je peux lancer le programme quand même en rentrant l'adresse du dossier requis dans mon Edit_Output1, mais impossible d'aller sélectionner un dossier à l'aide du SelectDirectory...

C'est pas bloquant mais c'est ch...

Merci encore, je reste à l'écoute !!!

Thomas.
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
Et si tu essayais de mettre un chDir(Dir) avant l'appel du SelectDirectory, juste pour voir.

Cordialement.
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
28
La doc (Win32 Developer's reference) indique pour l'erreur 123:
123L ERROR_INVALID_NAME
The file name, directory name, or volume label is syntactically incorrect.
(voir dans Programmes/Delphi x/Aide/Fichiers d'aide MS SDK/Guide du développeur Win32).

En relisant bien les options de la fonction SelectDirectory on y trouve :
sdPrompt : Utilisé uniquement en combinaison avec sdAllowCreate.Affiche une boîte de message informant l'utilisateur quand le répertoire saisi n'existe pas et demandant si ce répertoire doit être créé.Si l'utilisateur choisit OK,le répertoire est créési l'ensemble d'options comprend sdPerformCreate.S'il ne comprend pas sdPerformCreate,le répertoire n'est pas créé:l'application doit lire le nom du répertoire et le créer.

Ce qui confirmerait que l'appui sur la touche annuler déclenche une erreur puis que l'on tente d'utiliser un répertoire qui n'est pas créé d'où le message d'erreur : ERROR_INVALID_NAME




<HR color=#008000>


Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
23
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
30 juin 2006

Merci à tous !!!

Votre patience et votre réactivité m'ont permis de tordre le cou à ce problème.

Effectivement, j'ai encore bcp bcp à apprendre de Delphi, puisqu'un simple petit ChDir résolvait tous mes soucis ! Bien la peine de se creuser la tête pendant tout ce temps...

Donc merci WhiteHippo, Japee et Delphiprog, mes collègues vont enfin pouvoir utiliser mes prgs sans que je sois obligé de laisser trainer partout des fichiers ReadMe.txt qui expliquent comment contourner cette (...) d'erreur E/S 123...

A la prochaine !