Pregunta

Estoy creando un proveedor de WMI desacoplado en una biblioteca de clases. Todo lo que he leído apunta a incluir algo en este sentido:

[System.ComponentModel.RunInstaller(true)]
public class MyApplicationManagementInstaller : DefaultManagementInstaller { }

El objetivo de esta instalación es que la infraestructura de WMI de Windows debe conocer la estructura de mi proveedor de WMI antes de que se use.

Mi pregunta es: ¿cuándo es este " instalador " ¿corrió? MSDN dice que el instalador se invocará " durante la instalación de un ensamblaje " ;, pero no estoy seguro de qué significa o cuándo sucedería en el contexto de una biblioteca de clases que contiene un proveedor de WMI.

Tenía la impresión de que se trataba de un reemplazo automático para ejecutar manualmente InstallUtil.exe en el ensamblaje que contiene el proveedor de WMI, pero la infraestructura de WMI de Windows no reconoce los cambios que hago al proveedor. a menos que ejecute manualmente InstallUtil desde el símbolo del sistema. Puedo hacer esto en mi propia máquina durante el desarrollo, pero si una aplicación que utiliza el proveedor se implementa en otras máquinas, ¿entonces qué?

Parece que esta combinación RunInstaller / DefaultManagementInstaller no funciona correctamente, ¿correcto?

¿Fue útil?

Solución

Según tengo entendido, DefaultManagementInstaller se ejecuta con installutil.exe; si no lo incluye, la clase no se instala en WMI. Tal vez sea posible crear un 'proyecto de instalación' o 'proyecto de instalador' que lo ejecute, pero no estoy seguro porque no uso Visual Studio.

[editar]

para la instalación remota, una opción podría ser usar la opción Installutil with / MOF para generar MOF para el ensamblaje y usar mofcomp para moverlo a WMI.

Otros consejos

Uso algo como esto para llamar a InstallUtil programáticamente:

    public static void Run( Type type )
    {
        // Register WMI stuff
        var installArgs = new[]
                                   {
                                       string.Format( "//logfile={0}", @"c:\Temp\sample.InstallLog" ), "//LogToConsole=false", "//ShowCallStack",
                                       type.Assembly.Location,
                                   };

        ManagedInstallerClass.InstallHelper( installArgs );
    }

Llama a esto desde tu método Main ().

-dave

Gracias Uros. Parece que todo lo que RunInstaller y DefaultManagementInstaller hacen es permitirle ejecutar InstallUtil con éxito contra el ensamblaje. Esto es extraño porque estoy casi seguro de que no sabía sobre InstallUtil en el momento en que compilé y jugué con mi primer proveedor de WMI.

Buscaré el uso del archivo MOF y, para mi propio uso, puedo ejecutar la línea de comandos InstallUtil como un evento posterior a la compilación en VS.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top