Top

Un complemento para la MMC en 15 líneas de código

Un complemento para la MMC en 15 líneas de código

Si por algún motivo, nuestras aplicaciones necesitan una herramienta de administración enfocada hacía el personal de IT, no deberíamos darle demasiadas vueltas y desarrollar dicha aplicación como un complemento para la MMC, del mismo modo que Microsoft hace con muchos de sus productos. La MMC supone un entorno estándar para el personal de IT, lo cuál normalmente implica mayor comodidad para ellos y una curva de aprendizaje menor.

Desde la publicación de la versión 3.0 de la MMC, los desarrolladores ya tenemos otra posibilidad para desarrollar complementos o snap-ins. Ahora podemos desarrollarlos con código manejado.

Tenemos que tener varias cosas en cuenta:

  1. Añadir una referencia al ensamblado Microsoft.ManagementConsole
  2. Crear una clase para nuestro complemente. Para ello debemos heredar de la clase SnapIn.
  3. Crear un instalador para nuestro complemento. Para ellos simplemente necesitamos una clase que herede de SnapInInstaller, que es una clase utilidad derivada de Installer.
  4. Para instalar nuestro complemento deberemos usar la herramienta InstallUtil (que necesita el atributo [RunInstaller(true)]). Una vez hecho esto ya podemos añadir nuestro complemento a un consola desde el menú "Agregar o quitar complemento" de la MMC.
  5. Sobrescribimos el método OnInitialize() para crear el nodo raíz de nuestro complemento y si es necesario los demás nodos que cuelguen de el.
  6. Ir completando la funcionalidad de nuestro complemento a través de nodos en el "Árbol de consola", las vistas para esos nodos y las acciones sobre ambos que serán visibles en el "Panel de acciones". Os dejo un diagrama que representa de algún modo el modelo de objetos para la programación de complementos desde código manejado.

 

[RunInstaller(true)]

public class MyInstaller : SnapInInstaller

{

}

 

[SnapInSettings("{5A86AB6C-8571-4b7f-A844-1262B071891C}",

   DisplayName = "Complemento de administración",

   Description = "Blah, blah…")]

public class MiSnapIn : SnapIn

{

   protected override void OnInitialize()

   {

      RootNode = new ScopeNode();

      RootNode.DisplayName = "Mi Complemento";

   }

}

true)]

public class MyInstaller : SnapInInstaller

{

}

 

[SnapInSettings("{5A86AB6C-8571-4b7f-A844-1262B071891C}",

   DisplayName = "Complemento de administración",

   Description = "Blah, blah…")]

public class MiSnapIn : SnapIn

{

   protected override void OnInitialize()

   {

      RootNode = new ScopeNode();

      RootNode.DisplayName = "Mi Complemento";

   }

}

public class MyInstaller : SnapInInstaller

{

}

 

[SnapInSettings("{5A86AB6C-8571-4b7f-A844-1262B071891C}",

   DisplayName = "Complemento de administración",

   Description = "Blah, blah…")]

public class MiSnapIn : SnapIn

{

   protected override void OnInitialize()

   {

      RootNode = new ScopeNode();

      RootNode.DisplayName = "Mi Complemento";

   }

}

"{5A86AB6C-8571-4b7f-A844-1262B071891C}",

   DisplayName = "Complemento de administración",

   Description = "Blah, blah…")]

public class MiSnapIn : SnapIn

{

   protected override void OnInitialize()

   {

      RootNode = new ScopeNode();

      RootNode.DisplayName = "Mi Complemento";

   }

}

"Complemento de administración",

   Description = "Blah, blah…")]

public class MiSnapIn : SnapIn

{

   protected override void OnInitialize()

   {

      RootNode = new ScopeNode();

      RootNode.DisplayName = "Mi Complemento";

   }

}

"Blah, blah…")]

public class MiSnapIn : SnapIn

{

   protected override void OnInitialize()

   {

      RootNode = new ScopeNode();

      RootNode.DisplayName = "Mi Complemento";

   }

}

public class MiSnapIn : SnapIn

{

   protected override void OnInitialize()

   {

      RootNode = new ScopeNode();

      RootNode.DisplayName = "Mi Complemento";

   }

}

   protected override void OnInitialize()

   {

      RootNode = new ScopeNode();

      RootNode.DisplayName = "Mi Complemento";

   }

}

new ScopeNode();

      RootNode.DisplayName = "Mi Complemento";

   }

}

"Mi Complemento";

   }

}

Iván González Vilaboa
No Comments

Post a Comment