Ottenere informazioni sul servizio dall'archivio delle impostazioni

È possibile usare l'archivio impostazioni per trovare tutti i servizi disponibili o per determinare se è installato un particolare servizio. È necessario conoscere il tipo della classe del servizio.

Per elencare i servizi disponibili

  1. Creare un progetto VSIX denominato FindServicesExtension e quindi aggiungere un comando personalizzato denominato FindServicesCommand. Per altre informazioni su come creare un comando personalizzato, vedere Creare un'estensione con un comando di menu

  2. In FindServicesCommand.cs aggiungere le direttive using seguenti:

    using System.Collections.Generic;
    using Microsoft.VisualStudio.Settings;
    using Microsoft.VisualStudio.Shell.Settings;
    using System.Windows.Forms;
    
  3. Ottenere l'archivio delle impostazioni di configurazione, quindi trovare la sottocollection denominata Services. Questa raccolta include tutti i servizi disponibili. MenuItemCommand Nel metodo rimuovere il codice esistente e sostituirlo con quanto segue:

    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. Compilare il progetto e avviare il debug. Viene visualizzata l'istanza sperimentale.

  5. Nell'istanza sperimentale scegliere Invoke FindServicesCommand dal menu Strumenti.

    Verrà visualizzata una finestra di messaggio che elenca tutti i servizi.

    Per verificare queste impostazioni, è possibile usare l'editor del Registro di sistema.

Trovare un servizio specifico

È anche possibile utilizzare il CollectionExists metodo per determinare se è installato un particolare servizio. È necessario conoscere il tipo della classe del servizio.

  1. Nell'oggetto MenuItemCallback del progetto creato nella procedura precedente cercare l'archivio delle impostazioni di configurazione per la Services raccolta con la sottocollection denominata dal GUID del servizio. In questo caso si cercherà il servizio Guida.

    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. Compilare il progetto e avviare il debug.

  3. Nell'istanza sperimentale scegliere Invoke FindServicesCommand dal menu Strumenti.

    Verrà visualizzato un messaggio con il testo Help Service Available: seguito da True o False. Per verificare questa impostazione, è possibile usare un editor del Registro di sistema, come illustrato nei passaggi precedenti.