jueves, 18 de noviembre de 2010

Compartir Carpeta Programáticamente C#

Hola a todos, ya tiene rato que no escribo ninguna entrada, así que hoy quiero agregar una de como compartir una carpeta programáticamente en C# (aunque el codigo es fácil de pasar a VB.NET).

Primero que nada empezamos creando una nueva aplicación de consola.

Después en Referencias agregamos una a "System.Management".

No olviden agregar la clausula Using al inicio de su programa (también agreguen una a System.IO, para verificar que el directorio exista):

using System.Management;
using System.IO;

Agregada la referencia y todo en orden, ahora si vamos a crear nuestra función para compartir la carpeta:

private static void CompartirFolder(string rutaFolder, string nombreCompartido, string descripcion)
        {
            try
            {
                if (Directory.Exists(rutaFolder))
                {
                    ManagementClass managementClass = new ManagementClass("Win32_Share");
                    ManagementBaseObject inParams = managementClass.GetMethodParameters("Create");
                    ManagementBaseObject outParams;
                    inParams["Description"] = descripcion;
                    inParams["Name"] = nombreCompartido;
                    inParams["Path"] = rutaFolder;
                    inParams["Type"] = 0x0;
                    inParams["MaximumAllowed"] = null;
                    inParams["Password"] = null;
                    inParams["Access"] = null;
                    outParams = managementClass.InvokeMethod("Create", inParams, null);
                    if ((uint)(outParams.Properties["ReturnValue"].Value) != 0)
                    {
                        throw new Exception("No se puede compartir la carpeta.");
                    }
                }
                else
                {
                    throw new DirectoryNotFoundException("No se encontro la carpeta a compartir");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

Una vez agregada nuestra función solo nos queda utilizarla, yo cree dos carpetas de prueba en mi disco duro.

static void Main(string[] args)
        {
            CompartirFolder("c:\\test1", "Prueba 1", "Prueba de compartir carpeta desde C-Sharp");
            CompartirFolder("c:\\test2", "Prueba 2", "Prueba de compartir carpeta desde C-Sharp");
        }

Después de correr el programa verificamos las propiedades de nuestras carpetas y veremos que han quedado compartidas.
NOTA: Como pueden darse cuenta la carpeta queda compartida con Full Control para Todos los usuarios, ya en otro post veremos cómo asignar permisos a diferentes usuarios.

Saludos y hasta la próxima.