IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

problème de copie d'un fichier distant


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 30
    Par défaut problème de copie d'un fichier distant
    Bonjour,

    J'essaie de copier un fichier sur un dossier distant.
    Ce dossier est sur un volume NFS
    J'utilise File.copy.
    Mais cela ne fonctionne pas à cause d'un problème de droits.
    J'ai le message "utilisateur inconnu"
    Mais comment puis-je changer d'utilisateur epour pouvoir utiliser ce répertoire ?
    Où comment puis-je modifier les droits de l'utilisateur .NET ?

    Merci d'avance

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    Je ne sais pas si c'est possible.
    mais je devine que meme dans l'explorateur windows, tu rencontre le meme probleme non?
    Dans ce cas ca serait plus un probleme d'administration?

    Je crois avoir vu quelque chose hier dans msdn, je vais tenter de retrouver ca...

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    tu as : la classe Process et ProcessStartInfo qui peuvent t'aider

    En un mot ca te permet de faire un equivalent du "Excecuter en tant que"

    Chtit bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    System.Diagnostics.Process appli = new System.Diagnostics.Process();
    System.Diagnostics.ProcessStartInfo appliParams;
     
    appliParams.FileName="monAppliQuiCopie";
    appliParams.Arguments = "-source=\"c:\\fichier.txt -dest=d:\\fichier.txt";
    appliParams.Password = LoginDlg.TextBoxUser.Text;
    appliParams.UserName = LoginDlg.TextBoxMdp.Text;
     
    appli.Start(appliParams);

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 30
    Par défaut problème de copie de fichier distant
    Merci pour ta réponse.

    Mais je ne vois pas comment je peux l'appliquer,
    car j'utilise
    File.Copy( @"C:\Nomfichier.pdf", @"X:\Nomficier.pdf");
    et
    Directory.GetFiles(@"X:\", "*.pdf", SearchOption.TopDirectoryOnly)

    X:\ est un volume distant.

    si à la place je met C:\ tout fonctionne

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 30
    Par défaut Problème de copie d'un fichier distant
    Bonjour,

    J'ai trouvé un code sensé me permettre de me connecter un volume distant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
           public enum LogonType : int {
                   LOGON32_LOGON_INTERACTIVE =     2,
                   LOGON32_LOGON_NETWORK = 3,
                   LOGON32_LOGON_BATCH = 4,
                   LOGON32_LOGON_SERVICE = 5,
                   LOGON32_LOGON_UNLOCK = 7,
                   LOGON32_LOGON_NETWORK_CLEARTEXT = 8,    
                   LOGON32_LOGON_NEW_CREDENTIALS = 9       
           };
     
           public enum LogonProvider : int {
                   LOGON32_PROVIDER_DEFAULT = 0,
                   LOGON32_PROVIDER_WINNT35 = 1,
                   LOGON32_PROVIDER_WINNT40 = 2,
                   LOGON32_PROVIDER_WINNT50 = 3
           };
     
           class SecuUtil32 {
                   [DllImport("advapi32.dll", SetLastError=true)]
                   public static extern bool LogonUser(String lpszUsername, 
                           String lpszDomain, String lpszPassword,
                           int dwLogonType, int dwLogonProvider, ref IntPtr TokenHandle);
     
                   [DllImport("kernel32.dll", CharSet=CharSet.Auto)]
                   public extern static bool CloseHandle(IntPtr handle);
     
                   [DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
     
                   public extern static bool DuplicateToken(IntPtr  ExistingTokenHandle, int SECURITY_IMPERSONATION_LEVEL, 
                    ref IntPtr DuplicateTokenHandle);
           }
          public class NetworkSecurity {
     
                   public NetworkSecurity() {
                    }
     
                   public static WindowsImpersonationContext ImpersonateUser   
                   (string strDomain, string strLogin,string strPwd,LogonType  
                           logonType, LogonProvider logonProvider) {
                           IntPtr tokenHandle = new IntPtr(0);
                           IntPtr dupeTokenHandle = new IntPtr(0);
                           try {
                                   const int SecurityImpersonation = 2;
     
                                   tokenHandle = IntPtr.Zero;
                                   dupeTokenHandle = IntPtr.Zero;
                                   bool returnValue = SecuUtil32.LogonUser(
                                           strLogin,
                                           strDomain,
                                           strPwd,
                                           (int)logonType,
                                           (int)logonProvider,
                                           ref tokenHandle);
                                   if (returnValue == false)  {
                                           int ret = Marshal.GetLastWin32Error();
                                           string strErr = String.Format("LogonUser failed with error code : {0}", ret);
                                           throw new ApplicationException(strErr, null);
                                   }
     
                                   bool retVal = SecuUtil32.DuplicateToken(tokenHandle, 
                                   SecurityImpersonation, ref dupeTokenHandle);
                                   if (false == retVal == false) {
                                           SecuUtil32.CloseHandle(tokenHandle);
                                           throw new ApplicationException(
                                             "Failed to duplicate token", null);
                                   }
     
                                    WindowsIdentity newId = new WindowsIdentity 
                                       (dupeTokenHandle);
                                   WindowsImpersonationContext impersonatedUser = 
                                      newId.Impersonate();
     
                                   return impersonatedUser;
                           } catch (Exception ex) {
                                   throw new ApplicationException(ex.Message, ex);
                           }
                   }
           }
    que j'appelle avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
        WindowsImpersonationContext impContext;
        impContext = null;
        try
        {impContext = NetworkSecurity.ImpersonateUser( "",
                    "login", "motdepasse",
                    LogonType.LOGON32_LOGON_NETWORK, LogonProvider.LOGON32_PROVIDER_DEFAULT);
       }
        catch (ApplicationException ex)
        {
        }
        if (impContext != null)
        {
            try
            { foreach (string files in Directory.GetFiles(@"X:\", "*.pdf", SearchOption.TopDirectoryOnly))
                {
                    NomFichierFacture = files;
                }
            }
            catch (Exception ex)
            {
            }
            impContext.Undo();
        }
    Quel que soit le login et mot de passe que je rentre (correct ou incorrect j'ai toujours l'erreur "Failed to duplicate token"

    Je ne sais pas comment marche l'impersonation, donc je ne vois pas quel est le problème.

    Si quelqu'un peut m'aider

    Merci d'avance.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 30
    Par défaut Problème de copie d'un fichier distant
    j'ai corrigé
    la partie if(false == retVal == false)
    je n'ai plus l'erreur "fail to duplicate token" ,j'essaie d'atteindre le volume X mais j'ai l'erreur


    "Impossible de trouver une partie du chemin d'accès 'X:\'."

    Le changement d'utilisateur n'a pas fonctionné

Discussions similaires

  1. Copie d'un fichier distant en local
    Par titoumimi dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 0
    Dernier message: 14/02/2011, 19h17
  2. problème de copie d'un fichier
    Par totomimi dans le forum Général Java
    Réponses: 2
    Dernier message: 26/06/2009, 10h17
  3. Problème de copie d'un fichier
    Par fanouk dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/06/2008, 15h39
  4. [Probléme] Script copie dans un fichier
    Par maloute80 dans le forum Langage
    Réponses: 23
    Dernier message: 29/11/2007, 15h52
  5. problème de copie de fichier...
    Par Pe04 dans le forum Langage
    Réponses: 5
    Dernier message: 22/03/2006, 10h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo