從設定存放區取得服務資訊
您可以了解如何使用設定存放區來尋找所有可用的服務,或判斷是否已安裝特定服務。 您必須知道服務類別的類型。
列出可用的服務
建立名為
FindServicesExtension
的 VSIX 專案,然後新增名為FindServicesCommand
的自訂命令。 如需如何建立自訂命令的詳細資訊,請參閱使用功能表命令建立擴充功能在 FindServicesCommand.cs 中,新增下列 using 指示詞:
using System.Collections.Generic; using Microsoft.VisualStudio.Settings; using Microsoft.VisualStudio.Shell.Settings; using System.Windows.Forms;
取得組態設定存放區,然後尋找名為 [服務] 的子集合。 此集合包含所有可用的服務。 在
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。 若要確認此設定,您可以使用登錄編輯器,如先前步驟所示。