2012-10-15 74 views
1

我又回到了另一個SharePoint問題! 我有一個應用程序返回本地SharePoint場上的功能列表。但問題是,無論它們是否被激活,它似乎都將它們作爲「在線」返回。 例如,該功能將依舊會出現在我的應用程序爲「在線」,即使它沒有被激活:This feature would still be displayed as 'Online'SharePoint 2010中的服務器場功能狀態

我使用目前的代碼如下:

foreach (SPFeatureDefinition featureDefinition in featureCollection) 
      { 
       if (featureDefinition.Scope.Equals(scopeSelect)) 
       { 
        string featureName = featureDefinition.DisplayName; 

         XElement newItem = new XElement("Item", featureName); 
         XElement itemStatus = new XElement("Item", featureDefinition.Status); 
         infoTree.Add(newItem); 
         infoTree.Add(itemStatus); 
        } 
       } 
      } 

的問題是,無論特徵的實際狀態如何,featureDefinition.Status總是返回「在線」。這導致我相信我做錯了什麼,或者.Status屬性實際上並不是我正在尋找的。

是否有另一個屬性,我可以使用這將使我在正確的軌道上?

任何指導/建議將不勝感激!

編輯: 就像旁邊,IIS重置沒有任何影響它返回一個不同的狀態。

回答

2

是的,.Status屬性會告訴你Definition的狀態,但沒有在特定範圍內的功能的激活狀態。您需要了解一些有關此功能的特性:功能定義就是模板 - 您可以在特定級別(服務器場,Web應用程序,站點,網站)激活功能實例 - 因此您無法檢查功能的狀態定義,但需要檢查特徵的實例是否存在於特定範圍內。

要通過PowerShell檢查功能狀態,您可以使用Get-SPFeatureas described here。正如您所看到的,所有代碼都在調用Get-SPFeature,並且如果它返回特定範圍的某些內容,則會激活該功能。你可以在C#中做同樣的事情。

因此,當你想檢查一個功能是否被激活,例如在現場範圍內,您可以遍歷SPSite.Features,當你找到你知道它被激活的功能時。 Powershell命令行程序沒有做其他事情。

您想檢查一個農場功能,因此您可以檢查集合SPWebService.ContentService.Features以檢查已啓用的農場功能。見another example of a PowerShell script (almost looks like C#) here

+0

果然,'SPWebService.ContentService.Features'正是我正在尋找和需要做的。謝謝! – wjhguitarman

相關問題