Поделиться через


Получение сведений о службе из хранилища параметров

Хранилище параметров можно использовать для поиска всех доступных служб или определения того, установлена ли определенная служба. Необходимо знать тип класса службы.

Перечисление доступных служб

  1. Создайте проект VSIX с именем FindServicesExtension и добавьте пользовательскую команду с именем FindServicesCommand. Дополнительные сведения о создании настраиваемой команды см. в разделе "Создание расширения с помощью команды меню"

  2. В FindServicesCommand.cs добавьте следующие директивы using:

    using System.Collections.Generic;
    using Microsoft.VisualStudio.Settings;
    using Microsoft.VisualStudio.Shell.Settings;
    using System.Windows.Forms;
    
  3. Получите хранилище параметров конфигурации, а затем найдите вложенный набор именованных служб. Эта коллекция включает все доступные службы. В методе удалите существующий MenuItemCommand код и замените его следующим образом:

    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. Выполните сборку решения и запустите отладку. Откроется экспериментальный экземпляр.

  5. В экспериментальном экземпляре в меню "Сервис" нажмите кнопку Invoke FindServicesCommand.

    Появится окно сообщения со списком всех служб.

    Чтобы проверить эти параметры, можно использовать редактор реестра.

Поиск конкретной службы

Этот метод также можно использовать CollectionExists для определения того, установлена ли определенная служба. Необходимо знать тип класса службы.

  1. В менюItemCallback проекта, созданного в предыдущей процедуре, выполните поиск в хранилище параметров конфигурации для Services коллекции, которая имеет подсобор с именем GUID службы. В этом случае мы будем искать службу справки.

    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. Выполните сборку решения и запустите отладку.

  3. В экспериментальном экземпляре в меню "Сервис" нажмите кнопку Invoke FindServicesCommand.

    Появится сообщение со службой справки по тексту : за которым следует значение True или False. Чтобы проверить этот параметр, можно использовать редактор реестра, как показано на предыдущих шагах.