Inscription du schéma pour une application instrumentée
Une application instrumentée doit passer par une étape d'inscription, au cours de laquelle son schéma peut être découvert et inscrit dans le répertoire de stockage WMI. La publication du schéma est requise pour chaque assembly. Le schéma de tout assembly qui déclare des types d'instrumentation (événements ou instances) doit être publié vers WMI. Ceci s'effectue à l'aide des mécanismes d'installation standard du .NET Framework.
En premier lieu, il est nécessaire de définir un programme d'installation pour le projet. Si le projet n'a pas besoin de programme d'installation pour d'autres raisons, vous pouvez utiliser la classe d'assistance de programme d'installation par défaut fournie dans System.Management.Instrumentation et en dériver votre classe d'installation dans le code :
[System.ComponentModel.RunInstaller(true)]
public class MyInstaller : DefaultManagementProjectInstaller {}
Ceci indique au système que vous voulez exécuter une étape d'installation pour votre application. Si le projet doit passer par d'autres étapes d'installation et qu'un programme d'installation de projet a déjà été défini, vous devez utiliser la classe ManagementInstaller fournie dans System.Management.Instrumentation. Par exemple, vous pouvez ajouter le code suivant au constructeur du programme d'installation de votre projet :
ManagementInstaller managementInstaller = new ManagementInstaller();
Installers.Add(managementInstaller);
Pour appeler cette étape d'installation, plusieurs choix sont possibles :
Si vous empaquetez votre application dans un package d'installation MSI, vérifiez que l'option d'exécution des programmes d'installation .NET est activée et que le programme d'installation MSI exécutera les programmes d'installation automatiquement.
Exécutez l'utilitaire installutil.exe, disponible dans le kit de développement .NET Framework SDK, sur l'assembly instrumenté.
c:> installutil <yourassemblyname>
Vous pouvez exécuter le programme d'installation à partir de votre application, en ajoutant le code suivant au tout début de la fonction Main() :
string[] installArgs = new String[] { "/logfile=", "/LogToConsole=false", "/ShowCallStack", typeof(App).Assembly.Location, }; System.Configuration.Install.ManagedInstallerClass.InstallHelper(installArgs);
Remarque Notez toutefois qu'avec cette option, le schéma de gestion pour cette application ne sera disponible pour les consommateurs qu'après la première exécution de cette application, et non lors de son installation.
Quelle que soit la méthode que vous choisissez pour appeler l'inscription du schéma, celle-ci ne réussira que si l'utilisateur qui l'appelle est membre du groupe local Administrateurs. Normalement, il en est ainsi lorsqu'une application est installée ; notez cependant que si vous ne voulez pas exiger d'étape d'installation pour votre application, celle-ci devra être exécutée une fois par un administrateur local pour que le schéma de gestion soit inscrit et que l'application puisse fournir des données et des événements de gestion.
Pour faciliter la tâche des développeurs au moment du design, le schéma est publié automatiquement la première fois qu'une application déclenche un événement ou publie une instance. Ceci vous évite d'avoir à déclarer un programme d'installation de projet et d'exécuter InstallUtil durant la courte phase de conception du prototype d'une application. Ici aussi, la publication automatique du schéma n'a lieu que si la personne qui exécute l'application est membre du groupe local Administrateurs. Il est important de noter que vous ne devez pas compter sur ce comportement lorsque l'application est prête à être déployée. Le schéma pour un assembly instrumenté doit être publié à WMI au moment de l'installation, en utilisant l'un des mécanismes basés sur le programme d'installation décrits plus haut.
Le schéma de classe d'événement (ou d'instance) réside dans l'assembly et est inscrit dans le répertoire de stockage WMI durant l'installation.
Un assembly .NET peut avoir des informations de version. Il n'y a pas de correspondance directe entre la version de l'assembly et le schéma WMI inscrit dans le répertoire de stockage WMI.
La méthode conseillée pour éviter l'incompatibilité des versions est la suivante :
- En cas de modifications du schéma, réinstallez l'assembly en exécutant installutil.exe.
- Réinstallez les assemblys pour toutes les classes dérivées de la classe modifiée (s'il y en a).
- Recompilez les applications clientes.
Dans certains cas, cependant, des applications clientes ne peuvent pas être recompilées. Les deux scénarios suivants proposent des solutions à ce problème ; ils s'appliquent tous deux aux schémas d'événement :
Scénario 1 : Le schéma de classe d'événement n'a pas changé.
Action : Lors de la recompilation et de la réinstallation, vérifiez que les versions principale et secondaire de l'assembly contenant la définition de classe possèdent les valeurs d'origine.
Scénario 2 : Le schéma d'événement a été modifié. Plus spécialement, le schéma de classe d'événement a été modifié par ajout de propriétés et/ou de méthodes, mais aucune des propriétés/méthodes définies antérieurement n'a été supprimée.
Action : Dans ce cas, il est fortement recommandé de déplacer l'instrumentation de l'application vers un espace de noms WMI différent.
Si pour une raison quelconque, le schéma actuellement inscrit est endommagé, il peut arriver qu'une nouvelle exécution de installutil.exe ne détecte pas la nécessité de réinscrire le schéma d'origine. Dans ce cas, il est possible de forcer la réinstallation par le programme d'installation du schéma à l'aide du commutateur /f ou /force :
installutil.exe /f <yourassemblyname>
Suppression de l'inscription d'un schéma
Les programmes d'installation prennent généralement en charge un commutateur de désinstallation normalement utilisé comme suit :
installutil.exe /u <yourassemblyname>
où <yourassemblyname> est l'assembly contenant une définition de schéma inscrite précédemment.
Cependant, dans cette version, la classe ManagementInstaller n'effectue aucune opération lors de la désinstallation. Plus précisément, elle ne supprime pas l'inscription du schéma. La raison est la suivante : plusieurs fournisseurs WMI peuvent utiliser le même schéma et aucun mécanisme ne permet d'identifier si un schéma particulier n'est pas utilisé par une autre entité et s'il peut être supprimé en toute sécurité.
Voir aussi
Instrumentation des applications .NET Framework avec System.Management | Classes et mappage dans CLI et WMI | Exposition d'événements de gestion | Exposition de données de gestion | Héritage