Comment acceder un fichier sur le reseau avec un programme exe - C#/.NET managed - Programmation
Marsh Posté le 19-06-2007 à 14:14:48
il manque un "if" quelque part là
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...
Marsh Posté le 19-06-2007 à 16:51:07
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
++
Marsh Posté le 19-06-2007 à 17:15:59
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.
Marsh Posté le 19-06-2007 à 17:17:12
Genre on va y trouver ce genre de code :
Code :
|
PS : il ne s'appelle pas forcément "netlogon.bat", ça se configure sur le CPD.
Marsh Posté le 19-06-2007 à 17:21:27
Voilà où on configure le truc sur le CPD :
Le nom du script est en mode "relatif" par rapport au répertoire réseau "\\cpd\sysvol\domaine.ext\"
Marsh Posté le 20-06-2007 à 10:08:20
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+
Marsh Posté le 20-06-2007 à 10:46:31
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.
Marsh Posté le 20-06-2007 à 10:47:54
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.
Marsh Posté le 20-06-2007 à 11:12:29
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\
Marsh Posté le 20-06-2007 à 11:16:15
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
Marsh Posté le 20-06-2007 à 11:45:30
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
Marsh Posté le 20-06-2007 à 17:17:50
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+
Marsh Posté le 20-06-2007 à 17:35:38
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
Marsh Posté le 21-06-2007 à 17:54:45
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
Marsh Posté le 22-06-2007 à 09:27:11
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
Marsh Posté le 22-06-2007 à 09:29:47
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
Marsh Posté le 22-06-2007 à 09:32:47
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: |
donc je mets un start pour le net use et aussi quand je lance mon .exe?
Marsh Posté le 22-06-2007 à 09:34:19
ah oui et sinon l'option /persistent yes ou no, je m'en sers ici ou pas a ton avis?
Marsh Posté le 22-06-2007 à 09:36:10
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.
Marsh Posté le 22-06-2007 à 09:49:42
Un ptit test de
Citation : net use t: \\server_name\configuration |
dans un shell, me renvoie
Citation : System error 67 has occurred. |
Marsh Posté le 22-06-2007 à 09:51:46
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...
Marsh Posté le 22-06-2007 à 09:55:59
c'est bizarre, car si je teste aussi
Citation : net share |
j'ai ca
Citation : System error 5 has occurred. |
Marsh Posté le 22-06-2007 à 09:56:44
t'es sûr que le protocole de partage réseau est actif sur ton pc ?
Marsh Posté le 22-06-2007 à 10:26:37
Je sais pas, c est possible car je viens de tester sur une autre machine et ca passe, voici mon script:
Code :
|
Ca ne marche pas encore tres bien, car j'ai ce message.
Citation : |
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
Marsh Posté le 22-06-2007 à 13:28:09
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 :
|
Le programme arrive a lire mon fichier ini avec ce path:
Code :
|
Par contre, tout en ayant les memes fichiers sur le meme serveur, si je teste ceci:
Code :
|
le programme .exe est bien executé mais le fichier ini (\\server_name\share\params.ini) n'est cette fois-ci plus accessible
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
Marsh Posté le 22-06-2007 à 13:47:20
Peut être une question de droits sur le serveur?
A+,
Marsh Posté le 22-06-2007 à 14:34:52
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).
Marsh Posté le 22-06-2007 à 15:09:24
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?
++
Marsh Posté le 18-06-2007 à 16:16:16
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:
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+