Question

Je crée un fournisseur WMI découplé dans une bibliothèque de classes. Tout ce que j'ai lu indique qu'il faut inclure quelque chose dans ce sens:

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

Je suppose que le but de cette installation est que l'infrastructure Windows WMI doit connaître la structure de mon fournisseur WMI avant son utilisation.

Ma question est la suivante: quelle est cette "installation" " a couru? MSDN indique que le programme d'installation sera appelé "lors de l'installation d'un assemblage", mais je ne suis pas sûr de ce que cela signifie ou du moment où cela se produirait dans le contexte d'une bibliothèque de classes contenant un fournisseur WMI.

J'avais l'impression qu'il s'agissait d'un remplacement automatisé pour l'exécution manuelle de InstallUtil.exe sur l'assembly contenant le fournisseur WMI, mais les modifications que j'ai apportées au fournisseur ne sont pas reconnues par l'infrastructure Windows WMI. sauf si j'exécute manuellement InstallUtil à partir de l'invite de commande. Je peux le faire sur ma propre machine pendant le développement, mais si une application utilisant le fournisseur est déployée sur d'autres machines, alors quoi?

Il semble que cette combinaison RunInstaller / DefaultManagementInstaller ne fonctionne pas correctement - correct?

Était-ce utile?

La solution

Si je comprends bien, DefaultManagementInstaller est exécuté par installutil.exe. Si vous ne l'incluez pas, la classe n'est pas installée dans WMI. Peut-être est-il possible de créer un "projet d'installation" ou un "projet d'installation" qui l'exécute, mais je ne suis pas sûr car je n'utilise pas Visual Studio.

[edit]

pour l’installation à distance, vous pouvez utiliser l’option Installutil avec / MOF pour générer le MOF de l’assemblage et utiliser mofcomp pour le déplacer vers WMI.

Autres conseils

J'utilise quelque chose comme ceci pour appeler InstallUtil par programmation:

    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 );
    }

Appelez cela à partir de votre méthode Main ().

-dave

Merci Uros. Il semble que tout ce que RunInstaller et DefaultManagementInstaller permettent de lancer avec succès InstallUtil sur l’assembly. C'est étrange car je suis presque certain que je ne connaissais pas InstallUtil au moment où j'avais compilé et joué avec mon premier fournisseur WMI.

Je vais utiliser le fichier MOF et, pour mon usage personnel, je peux simplement exécuter la ligne de commande InstallUtil en tant qu'événement post-build dans VS.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top