从设置存储中获取服务信息
可以使用设置存储来查找所有可用的服务,或确定是否安装了特定服务。 必须知道服务类的类型。
列出可用服务
创建名为
FindServicesExtension
VSIX 的项目,然后添加名为 的FindServicesCommand
自定义命令。 有关如何创建自定义命令的详细信息,请参阅 使用菜单命令创建扩展在 FindServicesCommand.cs 中,添加以下 using 指令:
using System.Collections.Generic; using Microsoft.VisualStudio.Settings; using Microsoft.VisualStudio.Shell.Settings; using System.Windows.Forms;
获取配置设置存储区,然后找到名为 Services 的子集合。 此集合包括所有可用的服务。 在
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); }
生成项目并启动调试。 这将显示实验实例。
在实验实例的 “工具” 菜单上,单击“ 调用 FindServicesCommand”。
应会看到一个消息框,其中列出了所有服务。
若要验证这些设置,可以使用注册表编辑器。
查找特定服务
还可以使用 CollectionExists 该方法来确定是否安装了特定服务。 必须知道服务类的类型。
在上一过程中创建的项目的 MenuItemCallback 中,搜索具有服务 GUID 命名的集合的配置设置存储
Services
区。 在这种情况下,我们将查找帮助服务。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); }
生成项目并启动调试。
在实验实例的 “工具” 菜单上,单击“ 调用 FindServicesCommand”。
应会看到一条消息,其中包含文本 “帮助服务可用”: 后跟 True 或 False。 若要验证此设置,可以使用注册表编辑器,如前面的步骤所示。