StreamReader & Ordinateur distant

dimo972 - 19 févr. 2013 à 11:38
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 19 févr. 2013 à 21:13
Bonjour à tous,
Je vous expose donc mon problème.
J'ai plusieurs ordinateurs distants pour lesquels j’ai une appli qui doit lire un fichier texte sur ceux-ci. Jusque là rien de problématique. Le problème vient du fait que si l’utilisateur loggé utilisant l’appli n’est pas dans le groupe administrateur de l’ordinateur distant je n’arrive pas à accéder au fichier.
Ma question sera donc : Existe-t-il un façon de procéder afin de stipuler des paramètre de connexion à un streamreader ou a un fileinfo ?

4 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
19 févr. 2013 à 13:58
Salut,

j'ai eu le même problème et j'ai appliqué une solution qui n'est peut être pas la meilleure (existe certainement autre chose) mais qui marche.
Je simule un NET USE via le process "console" en pointant le repertoire distant avec user et pass du compte à ouvrir.
A la fin, je referme l'accès.

Exemple :

// Membre de la classe du programme
// sert à la fermeture et permet de ne pas ouvrir plusieurs fois
private bool m_bNetUse = false;

// Au lancement du programme ou du process d'accès au répertoire distant
private bool AppliqueNetUse(string sPath, string sUser, string sPass)
{
// Si déjà ouvert, on sort	
if(m_bNetUse) return;

try
{
// simule traitement et provoque une exception si repertoire inaccessible
// SI ACCESSIBLE, PAS LA PEINE D'APPLIQUER LE NET USE !
DirectoryInfo diTest = new DirectoryInfo(sPath);
FileInfo[] fiTest = diTest.GetFiles();
return true;
}
catch ( Exception )
{
try
{
Process p = new Process();
ProcessStartInfo pi = new ProcessStartInfo();
pi.FileName = "net";
pi.Arguments =
"use " +
sPath + " " +
sPass +
" /USER:" +
sUser;
pi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
p.StartInfo = pi;
p.Start();
p.WaitForExit(10000); // laisse 10 seconde au net use
m_bNetUse = true;
}
catch ( Exception netUseExc )
{
//TRACE("ERREUR NET USE : " + netUseExc.Message);
return false;
}
}
}

// A la fin du programme ou du process d'accès au repertoire distant
private void FemeNetUse(string sPath)
{
if ( !m_bNetUse )
return;
try
{
Process p = new Process();
ProcessStartInfo pi = new ProcessStartInfo();
pi.FileName = "net";
pi.Arguments = "use " + sPath + "  /DELETE";
pi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
p.StartInfo = pi;
p.Start();
p.WaitForExit(10000);
}
catch ( Exception ) { }
finally{ m_bNetUse = false; }
}


bye...
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
19 févr. 2013 à 14:04
Re,

attention, manque juste le :
return m_bNetUse;
à la toute fin de la méthode : AppliqueNetUse

bye...
0
Merci yann_lo_san de ta réponse rapide mais malgré tes méthodes qui elles arrivent bien à accéder au fichier le streamreader me sort tjrs l'exception accès fichier refusé.
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
19 févr. 2013 à 21:13
Re,

Si le fichier est sur un répertoire protégé, c'est normal.

As tu essayé d'autres méthodes que la lecture distante directe ?
Par exemple

- copier le fichier sur un autre répertoire accessible (temp de l'user) avant de le lire

- ou lancer un process avec privilèges admin puis exécuter une commande du style
type leFichier > "%TMP%\copieFichier.txt"

puis aller lire la copie avec le streamReader qui est dans TMP de l'user

bye...
0
Rejoignez-nous