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.