Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1629 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Comment acceder un fichier sur le reseau avec un programme exe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment acceder un fichier sur le reseau avec un programme exe

n°1576346
cervantes
Posté le 18-06-2007 à 16:16:16  profilanswer
 

Slt,
 
Avec un programme C#, je dois ouvrir et lire le contenu d'un fichier ()fichier texte ini) se trouvant sur une autre machine que celle ou est le programme .exe. Le probleme est que le programme .exe n'arrive pas à trouver ce fichier quand il souhaite le lire.
 
Quand j'utilise la fonction Exists, elle me dit que le fichier n'existe pas. Voici le bout de code:
 

Code :
  1. this.iniFilePath = "\\\\my-server\\d$\\partage\\fichier.ini";
  2. File.Exists(iniFilePath)
  3. {
  4. // File exists
  5. }
  6. else
  7. {
  8. // File does not exist
  9. }


 
Pourtant, si je vais dans Demarrer -> Executer et que je tape \\\\my-server\\d$\\partage\\fichier.ini, le fichier est bien ouvert sans probleme.
 
Ma question est donc comment acceder un fichier avec un programme .exe lorsque ce fichier n'est pas sur la meme machine que l'executable?
 
Merci d'avance
 
a+

mood
Publicité
Posté le 18-06-2007 à 16:16:16  profilanswer
 

n°1576784
MagicBuzz
Posté le 19-06-2007 à 14:14:48  profilanswer
 

il manque un "if" quelque part là :o
 
sinon, à partir du moment où le user qui lance le programme à les droits nécessaires pour accéder au répertoire réseau, y'a pas de raison pour que tu ne puisses pas y accéder.
 
a noter tout de même que :
1/ tu peux modifier le compte utilisateur avec lequel tourne ton programme (regarde dans le namespace "Security" )
2/ visiblement, c'est un fichier de configuration de ton programme ? alors passe pas un net use dans ton letlogon.bat ce sera plus propre...

n°1576904
cervantes
Posté le 19-06-2007 à 16:51:07  profilanswer
 

Slt MagicBuzz,
 
Oui il manque un if, copier/coller trop rapide
 
Pour les droits d'user je suis tout a fait d'Accord avec toi, cependant je ne vois pas d'explication, pourquoi je peux acceder mon fichier de configuration avec l'explorateur Windows (\\my-server\d$\partage\fichier.ini) mais que mon programme que j'execute sous mon compte n'y arrive pas ( File.Exists(\\\\my-server\\d$\\partage\\fichier.ini) )
 
Pour ta première idée, modifier le compte utilisateur avec lequel tourne ton programme, je ne sais pas du tout comment faire ca en C#. Je vais regarder sur le net comment on fait ca. Si tu as des liens, exemples de code etc. je suis preneur.
 
Pour ta deuxième idée, oui cèst bien un fichier de configuration utilisé par mon programme. Par contre, je ne connais psa du tout le fichier netlogon.bat ni a quoi il sert. Cependant, je ne pense pas que ce soit la solution a mon probleme car, d'une part ce programme doit etre intallé sur plusieurs serveurs, et de l'autre, les administrators ne voudront jamais modifier des fichiers de configuration de Windows juste pour un seul programme.
 
Si ta des autres idées  :)  
 
Merci
++

n°1576930
MagicBuzz
Posté le 19-06-2007 à 17:15:59  profilanswer
 

netlogon.bat est un batch qui se trouve dans le répertoire partagé SYSVOL du contrôleur de domaine.
 
il est exécuté au démarrage d'une session sur le domaine sur n'importe quel PC du domaine.
 
on s'en sert généralement justement pour monter des répertoires réseau, de façon à ce qu'ils soient systématiquement présents chez tout le monde, et avec les mêmes noms.
 
PS : on peut l'améliorer en le paramétrant de façon plus ou moins évoluée en fonction des groupes de travail, du login, etc.

n°1576932
MagicBuzz
Posté le 19-06-2007 à 17:17:12  profilanswer
 

Genre on va y trouver ce genre de code :
 

Code :
  1. net use f: \\serveur1\drivers
  2. net use g: \\serveur1\biblosuite
  3. net use h: \\serveur1\boietch
  4. net use i: \\serveur1\syl-jér
  5. rem net use j: \\serveur\tous
  6. rem net use s: \\srvbci\sage
  7. net use w: \\srvgnxtrt\generix
  8. call .\login2.bat


 
PS : il ne s'appelle pas forcément "netlogon.bat", ça se configure sur le CPD.

n°1576941
MagicBuzz
Posté le 19-06-2007 à 17:21:27  profilanswer
 

Voilà où on configure le truc sur le CPD :
http://img516.imageshack.us/img516/6302/netlogonmd0.png
 
Le nom du script est en mode "relatif" par rapport au répertoire réseau "\\cpd\sysvol\domaine.ext\"

n°1577102
cervantes
Posté le 20-06-2007 à 10:08:20  profilanswer
 

Slt,
 
Merci pour toutes ces explications.
Peut etre que je nai pas bien compris comment ca fonctionne, mais est ce que je peux avec le fichier netlogon.bat ou son equivanlent dans le repertoire SYSVOL, dire que  je veux que mon partage \\my-server-1\dossier_de_config\ soit créé uniquement pour les serveurs serveur-alpha et serveur-beta et non pour toutes les machines?
 
Autre ptite question, si je fais net use f: \\my-server-1\dossier_de_config\, dans mon programme C#, pour utiliser le contenu du dossier \my-server-1\dossier_de_config\fichier_ini\, j'utilise  \\my-server-1\f$ , c 'est ca?
 
A+

n°1577119
MagicBuzz
Posté le 20-06-2007 à 10:46:31  profilanswer
 

Normalement, oui, chaque PC sur un domaine à un compte. Tu devrais pouvoir leur coller un script aussi (à vérifier).
 
Sinon, avec un bat tu récupères le host et ça te permet de monter ou non le lecteur selon des tests sur ce nom.
 
Y'a pas mal d'exemple dans la MSDN de scripts d'admin de ce genre.

n°1577121
MagicBuzz
Posté le 20-06-2007 à 10:47:54  profilanswer
 

non, si tu fais un "net use f: \\my-server-1\dossier_de_config\" tu as un lecteur F: qui apparait sur ton ordinateur comme si c'était un disque dur local, mais c'est un disque réseau.
et l'accès à de tels disques est parfaitement identique à celui d'un disque local, donc plus de problème normalement.

n°1577133
cervantes
Posté le 20-06-2007 à 11:12:29  profilanswer
 

Bon jai demande a ladmin, et on peut pas modifier le logon batch
Le seul truc qui m|a dit, on peut creer un partage pour ton repertoire distant, et apres je peux lacceder avec par exemple \\my-server-1\share\

mood
Publicité
Posté le 20-06-2007 à 11:12:29  profilanswer
 

n°1577137
MagicBuzz
Posté le 20-06-2007 à 11:15:26  profilanswer
 

déjà ce sera mieux en effet.

n°1577138
MagicBuzz
Posté le 20-06-2007 à 11:16:15  profilanswer
 

ps : vous avez pas un sgbd qui se balade sur le réseau ? pkoi ne pas strocker les infos de ton ini dans une table de paramétrage, et y acceder avec une connection sql ? au moins ça résoudra le problème :D

n°1577172
cervantes
Posté le 20-06-2007 à 11:45:30  profilanswer
 

A vrai dire, jai pas pense a l idee de la bdd. Cependant ce fichier ini ne sert pas juste a lire des parametres. Une autre application modifie ce fichier pour modifier les parametres.
 
De plus, l utilisation dune bdd risque detre assez lourd a gerer car ce fichier peut etre installe sur des serveurs de domaine different, au US et Europe par exemple.
 
Merci pour l info

n°1577238
MagicBuzz
Posté le 20-06-2007 à 12:23:31  profilanswer
 

Un WebService alors [:magicbuzz]

n°1577355
cervantes
Posté le 20-06-2007 à 17:17:50  profilanswer
 

Bon, alors ce que j'ai fait. Créé un share pour le repertoire ou se trouve le fichier ini, et mis tous les droits dessus pour tout le monde. Avec ca le programme .exe arrive a lire et ecrire dans le fichier ini.
 
Je ne pense pas que ce soit la meilleur solution, mais au moins j'ai une solution qui marche, maintenant on verra si ca plaira au boss.
 
a+

n°1577365
MagicBuzz
Posté le 20-06-2007 à 17:35:38  profilanswer
 

Ben maintenant que t'as cette solution, tu peux tenter de l'affiner, jusqu'à trouver ce qui ne marche pas.
 
Notamment, ton programme ne fait que lire non ?
Dans ce cas, supprime tous les droits en modification sur le partage :)

n°1577746
cervantes
Posté le 21-06-2007 à 17:54:45  profilanswer
 

Bon ya du changement, apparemment les personnes de l'autre cote de l'atlantique se sont decidées pour utiliser finalement un net use f: ......
Mais bon le truc c'est qu'ils veulent pas que se soit fait automatiquement avec le netlogon.bat par exemple.
 
En gros, je cree un batch file, je fais le net use, puis j'execute le .exe et enfin je fais le rem net use.
 
Un peu bizarre comme truc, je sais pas si ca va marcher

n°1577749
MagicBuzz
Posté le 21-06-2007 à 17:58:57  profilanswer
 

sisi ça va marcher :)
 
start /wait application.exe

n°1577870
cervantes
Posté le 22-06-2007 à 09:27:11  profilanswer
 

hum, comment tu fais le rem net use dans le batch file? parce que la commande rem correspond au commentaire en batch :S
donc du coup rem net use donne rien

n°1577872
MagicBuzz
Posté le 22-06-2007 à 09:29:10  profilanswer
 

rem ? remove ?
 
net stop lecteur:

n°1577873
MagicBuzz
Posté le 22-06-2007 à 09:29:47  profilanswer
 

ps : n'oublie pas de lancer ton appli comme je t'ai dit, avec un start /wait, sinon ça va la démarrer en mode asynchrone et donc démonter le lecteur tout de suite

n°1577874
cervantes
Posté le 22-06-2007 à 09:32:47  profilanswer
 

Slt,
 
sur cette page: http://www.ss64.com/nt/net_use.html il dise
 

Citation :

in a script, to map a drive and wait until the mapping has completed before continuing:
START /wait NET USE [driveletter:] \\ComputerName\ShareName


 
donc je mets un start pour le net use et aussi quand je lance mon .exe?


Message édité par cervantes le 22-06-2007 à 09:33:13
n°1577876
cervantes
Posté le 22-06-2007 à 09:34:19  profilanswer
 

ah oui et sinon l'option /persistent yes ou no, je m'en sers ici ou pas a ton avis?

n°1577878
MagicBuzz
Posté le 22-06-2007 à 09:36:10  profilanswer
 

non, ne te sert pas de persistent, sinon le lecteur sera toujours présent au rédémarrage, ce qu'il ne faut pas faire.
 
oui, tu peux mettre un /wait si ton application nécessite un accès à ce lecteur dès le début. si au contraire elel va lire le fichier sur le réseau qu'après un certain temps d'utilisation, ça sert à rien, un lecteur réseau ça met vraiment un rien de temps à se monter.

n°1577879
cervantes
Posté le 22-06-2007 à 09:37:10  profilanswer
 

ok, je fais des tests
 
je te tiens au courant.
 
thx

n°1577885
cervantes
Posté le 22-06-2007 à 09:49:42  profilanswer
 

Un ptit test de
 

Citation :

net use t: \\server_name\configuration


 
dans un shell, me renvoie
 

Citation :

System error 67 has occurred.
 
The network name cannot be found.


 

n°1577887
MagicBuzz
Posté le 22-06-2007 à 09:51:46  profilanswer
 

t'as vraiment un problème toi.
et j'ai pas l'impression que ce soit un problème de droit...
 
on dirait que t'accède pas au dns ni au wins du réseau...


Message édité par MagicBuzz le 22-06-2007 à 09:52:14
n°1577888
cervantes
Posté le 22-06-2007 à 09:55:59  profilanswer
 

c'est bizarre, car si je teste aussi
 

Citation :

net share


 
j'ai ca
 

Citation :

System error 5 has occurred.
 
Access is denied.

n°1577890
MagicBuzz
Posté le 22-06-2007 à 09:56:44  profilanswer
 

t'es sûr que le protocole de partage réseau est actif sur ton pc ? :o

n°1577909
cervantes
Posté le 22-06-2007 à 10:26:37  profilanswer
 

Je sais pas, c est possible car je viens de tester sur une autre machine et ca passe, voici mon script:
 

Code :
  1. START /WAIT net use t: \\%prod_admin_server%\d$\%relative_path%
  2. START /WAIT /B t:\PCR_Automatic\pcr_automatic.exe
  3. net use t: /delete


 
 
Ca ne marche pas encore tres bien, car j'ai ce message.
 

Citation :


There are open files and/or incomplete directory searches pending on the connect
ion to t:.
 
Is it OK to continue disconnecting and force them closed? (Y/N) [N]: Argument mi
ssing.
Usage: pcr_automatic.exe server_name portal_area1 portal_area2 ...


 
Je ne sais pas pourquoi, mais d'apres l'ordre des messages, on dirait que le programme .exe est executé apres la commande pour retirer le mapping.
 
J'ai donc essayé sans les starts, et la tout s'execute dans l'ordre sans probleme.
 
Cependant,  quoi qu'il en soit, en utilisant la solution du net use ....., puis de l'execution du programme, j'ai de nouveau mon probleme d'acces au fichier de configuration ini. Une fois le mapping fait, le programme n'arrive pas a acceder au fichier ini t:\params.ini, pourtant j'arrive a y acceder manuallement avec la commande "Demarrer -> executer -> t:\pcr.ini", et ceci avec ou sans partage du dossier ou se trouve le fichier ini.
Ce que je comprends pas. Le fichier batch execute le programme exe a distance, sans probleme d'acces (t:\PCR_Automatic\pcr_automatic.exe ou \\server_name\pcr_automatic.exe marche), mais dans le code du programme, que je fassse t:\param.ini ou \\\\server_name\pcr.ini pour lire ce fichier, le programme n'arrive pas a acceder au fichier ini.
 
Il est ou le probleme ici?  
 
 
 
Je tourne en rond  :pt1cable:


Message édité par cervantes le 22-06-2007 à 11:40:52
n°1577997
cervantes
Posté le 22-06-2007 à 13:28:09  profilanswer
 

Jài fait plusieurs tests dans tous les sens. J'arrive a ceci.
 
J'ai copié mon programme .exe et le script batch sur le meme serveur ou se trouve le fichier ini. J'ai aussi un share de cree pour ce dossier "D:\Dossier\".
 
Si j'execute ceci avec le batch file:
 

Code :
  1. D:\Dossier\pcr_automatic.exe


 
Le programme arrive a lire mon fichier ini avec ce path:    

Code :
  1. \\server_name\share\params.ini


 
Par contre, tout en ayant les memes fichiers sur le meme serveur, si je teste ceci:

Code :
  1. \\server_name\share\pcr_automatic.exe


 
le programme .exe est bien executé mais le fichier ini (\\server_name\share\params.ini) n'est cette fois-ci plus accessible  :heink:
 
On dirait que parce que le programme .exe est execute avec un remote path, il n'arrive pas plus a acceder a aucun path, aussi bien les remote path que les locaux. Donc en gros, apparemment l'execution en local marche, que ce soit avec un appel du fichier iniavec un local ou remote path, par contre avec une execution en remote, quelque soit le type de path utilisé pour le fichier ini, celui-ci reste inaccessible


Message édité par cervantes le 22-06-2007 à 13:40:25
n°1578004
gilou
Modérateur
Modzilla
Posté le 22-06-2007 à 13:47:20  profilanswer
 

Peut être une question de droits sur le serveur?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1578028
cervantes
Posté le 22-06-2007 à 14:34:52  profilanswer
 

Qu'est ce que tu veux que je mette comme droit sur le serveur? Les fichiers sont en full permission pour tous et mon compte a lui meme tous les droits (donc normalement le programme que jexecute les a aussi).

n°1578056
cervantes
Posté le 22-06-2007 à 15:09:24  profilanswer
 

Sinon, juste une ptite question a propos de la commande start, quand je l'utilise et que j'utilise le parametre /WAIT, je dois appuyer sur entrer pour que le script se termine, y a t-il un moyen pour que le script se termine tout seul?
 
++

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Comment acceder un fichier sur le reseau avec un programme exe

 

Sujets relatifs
Comment executer un .exe situé sur une autre machine du reseau?Comment Executer un programme linux depuis php
[Javascript] inclure un fichier .js dans un fichier .jsInstallation Hardware fichier inf besoin d'aide
Extraction d'url depuis un fichierSupprimer des doublons d'un fichier en conservant la dernière ligne
[Résolu]Programme supprimant les commentaires d'un fichier CBesoin aide en PHP,lister un fichier
[C#]Accéder à ma listview depuis un thread 
Plus de sujets relatifs à : Comment acceder un fichier sur le reseau avec un programme exe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR