Question

    

Cette question a déjà une réponse ici:

         

J'ai une application Windows Forms s'exécutant sur une machine autre que celle d'un domaine. Elle doit pouvoir déplacer un fichier du système de fichiers local vers un chemin UNC. J'ai un nom d'utilisateur et un mot de passe pour ce chemin. Je me demandais s'il y avait un moyen de le faire directement sans exécuter la commande net.exe ?

Idéalement, je n’aurais pas à cartographier un lecteur.

Était-ce utile?

La solution

La réponse acceptée sur cette question ici semble être intéressant; il suggère d'utiliser la fonction API Win32 WNetUseConnection .

À partir de MSDN:

  

La fonction WNetUseConnection crée une   connexion à une ressource réseau. le   fonction peut rediriger un périphérique local   à une ressource réseau.

Ce qui semble accomplir ce que vous cherchez, sans mentionner net.exe . Est-ce que cela vous aide?

Autres conseils

Vous pouvez utiliser WNetAddConnection pour accomplir cela. Vous devrez invoquer. le code ci-dessous a fonctionné pour moi après la configuration des déclarations pInvoke. Le second bloc de code (ci-dessous) contient les déclarations pInvoke - il suffit de le coller à l'intérieur d'une classe.


        public static void CopyFile(string from, string shareName, string username, string password)
        {
            NETRESOURCE nr = new NETRESOURCE();
            nr.dwType = ResourceType.RESOURCETYPE_DISK;
            nr.lpLocalName = null;
            nr.lpRemoteName = shareName;
            nr.lpProvider = null;

            int result = WNetAddConnection2(nr,  password,  username, 0);
            System.IO.File.Copy(from, System.IO.Path.Combine(shareName, System.IO.Path.GetFileName(from)));
        }


Vous devrez coller le code de support suivant dans une classe (extraite de pInvoke.Net). Assurez-vous d’ajouter une déclaration d’utilisation à votre code:

using System.Runtime.InteropServices

        [DllImport("Mpr.dll", EntryPoint = "WNetAddConnection2", CallingConvention = CallingConvention.Winapi)]
        private static extern int WNetAddConnection2(NETRESOURCE lpNetResource, string lpPassword,  
                                      string lpUsername, System.UInt32 dwFlags);

        [StructLayout(LayoutKind.Sequential)]
        private class NETRESOURCE
        {
            public ResourceScope dwScope = 0;
            public ResourceType dwType = 0;
            public ResourceDisplayType dwDisplayType = 0;
            public ResourceUsage dwUsage = 0;
            public string lpLocalName = null;
            public string lpRemoteName = null;
            public string lpComment = null;
            public string lpProvider = null;
        };

        public enum ResourceScope
        {
            RESOURCE_CONNECTED = 1,
            RESOURCE_GLOBALNET,
            RESOURCE_REMEMBERED,
            RESOURCE_RECENT,
            RESOURCE_CONTEXT
        };

        public enum ResourceType
        {
            RESOURCETYPE_ANY,
            RESOURCETYPE_DISK,
            RESOURCETYPE_PRINT,
            RESOURCETYPE_RESERVED
        };

        public enum ResourceUsage
        {
            RESOURCEUSAGE_CONNECTABLE = 0x00000001,
            RESOURCEUSAGE_CONTAINER = 0x00000002,
            RESOURCEUSAGE_NOLOCALDEVICE = 0x00000004,
            RESOURCEUSAGE_SIBLING = 0x00000008,
            RESOURCEUSAGE_ATTACHED = 0x00000010,
            RESOURCEUSAGE_ALL = (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED),
        };

        public enum ResourceDisplayType
        {
            RESOURCEDISPLAYTYPE_GENERIC,
            RESOURCEDISPLAYTYPE_DOMAIN,
            RESOURCEDISPLAYTYPE_SERVER,
            RESOURCEDISPLAYTYPE_SHARE,
            RESOURCEDISPLAYTYPE_FILE,
            RESOURCEDISPLAYTYPE_GROUP,
            RESOURCEDISPLAYTYPE_NETWORK,
            RESOURCEDISPLAYTYPE_ROOT,
            RESOURCEDISPLAYTYPE_SHAREADMIN,
            RESOURCEDISPLAYTYPE_DIRECTORY,
            RESOURCEDISPLAYTYPE_TREE,
            RESOURCEDISPLAYTYPE_NDSCONTAINER
        };

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top