Obter informações de serviço do repositório de configurações

Você pode usar o repositório de configurações para localizar todos os serviços disponíveis ou para determinar se um determinado serviço está instalado. Você deve saber o tipo da classe de serviço.

Para listar os serviços disponíveis

  1. Crie um projeto VSIX chamado e, em seguida, adicione um comando personalizado chamado FindServicesExtension FindServicesCommand. Para obter mais informações sobre como criar um comando personalizado, consulte Criar uma extensão com um comando de menu

  2. Em FindServicesCommand.cs, adicione o seguinte usando diretivas:

    using System.Collections.Generic;
    using Microsoft.VisualStudio.Settings;
    using Microsoft.VisualStudio.Shell.Settings;
    using System.Windows.Forms;
    
  3. Obtenha o repositório de definições de configuração e localize a subcoleção chamada Serviços. Esta coleção inclui todos os serviços disponíveis. No método, remova o MenuItemCommand código existente e substitua-o pelo seguinte:

    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. Compile o projeto e comece a depuração. A instância experimental é exibida.

  5. Na instância experimental, no menu Ferramentas , clique em Invoke FindServicesCommand.

    Você verá uma caixa de mensagem listando todos os serviços.

    Para verificar essas configurações, você pode usar o editor do Registro.

Encontre um serviço específico

Você também pode usar o CollectionExists método para determinar se um determinado serviço está instalado. Você deve saber o tipo da classe de serviço.

  1. No MenuItemCallback do projeto criado no procedimento anterior, pesquise o repositório de definições de configuração para a coleção que tem a Services subcoleção nomeada pelo GUID do serviço. Neste caso, procuraremos o serviço de Ajuda.

    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. Compile o projeto e comece a depuração.

  3. Na instância experimental, no menu Ferramentas , clique em Invoke FindServicesCommand.

    Você verá uma mensagem com o texto Serviço de Ajuda Disponível: seguido de Verdadeiro ou Falso. Para verificar essa configuração, você pode usar um editor do Registro, conforme mostrado nas etapas anteriores.