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.