Obtenir des informations de service à partir du magasin de paramètres

Vous pouvez utiliser le magasin de paramètres pour rechercher tous les services disponibles ou déterminer si un service particulier est installé. Vous devez connaître le type de la classe de service.

Pour répertorier les services disponibles

  1. Créez un projet VSIX nommé FindServicesExtension , puis ajoutez une commande personnalisée nommée FindServicesCommand. Pour plus d’informations sur la création d’une commande personnalisée, consultez Créer une extension avec une commande de menu

  2. Dans FindServicesCommand.cs, ajoutez les directives using suivantes :

    using System.Collections.Generic;
    using Microsoft.VisualStudio.Settings;
    using Microsoft.VisualStudio.Shell.Settings;
    using System.Windows.Forms;
    
  3. Obtenez le magasin des paramètres de configuration, puis recherchez le sous-regroupement nommé Services. Cette collection inclut tous les services disponibles. Dans la MenuItemCommand méthode, supprimez le code existant et remplacez-le par les éléments suivants :

    private void MenuItemCallback(object sender, EventArgs e)
    {
        SettingsManager settingsManager = new ShellSettingsManager(ServiceProvider);
        SettingsStore configurationSettingsStore = settingsManager.GetReadOnlySettingsStore(SettingsScope.Configuration);
        string message = "Available services:\n";
        IEnumerable<string> collection = configurationSettingsStore.GetSubCollectionNames("Services");
        int n = 0;
        foreach (string service in collection)
        {
            message += configurationSettingsStore.GetString("Services\\" + service, "Name", "Unknown") + "\n";
        }
    
        MessageBox.Show(message);
    }
    
  4. Générez le projet et commencez le débogage. L’instance expérimentale s’affiche.

  5. Dans l’instance expérimentale, dans le menu Outils , cliquez sur Invoke FindServicesCommand.

    Vous devriez voir une boîte de message répertoriant tous les services.

    Pour vérifier ces paramètres, vous pouvez utiliser l’éditeur de Registre.

Rechercher un service spécifique

Vous pouvez également utiliser la CollectionExists méthode pour déterminer si un service particulier est installé. Vous devez connaître le type de la classe de service.

  1. Dans le MenuItemCallback du projet que vous avez créé dans la procédure précédente, recherchez le magasin des paramètres de configuration de la Services collection dont le sous-regroupement est nommé par le GUID du service. Dans ce cas, nous allons rechercher le service d’aide.

    private void MenuItemCallback(object sender, EventArgs e)
    {
        SettingsManager settingsManager = new ShellSettingsManager(ServiceProvider);
        SettingsStore configurationSettingsStore = settingsManager.GetReadOnlySettingsStore(SettingsScope.Configuration);
        string helpServiceGUID = typeof(SVsHelpService).GUID.ToString("B").ToUpper();
        bool hasHelpService = configurationSettingsStore.CollectionExists("Services\\" + helpServiceGUID);
        string message = "Help Service Available: " + hasHelpService;
    
        MessageBox.Show(message);
    }
    
  2. Générez le projet et commencez le débogage.

  3. Dans l’instance expérimentale, dans le menu Outils , cliquez sur Invoke FindServicesCommand.

    Vous devez voir un message avec le service d’aide texte Disponible : suivi de True ou False. Pour vérifier ce paramètre, vous pouvez utiliser un éditeur de Registre, comme indiqué dans les étapes précédentes.