2014-09-24 34 views
2

我的研究表明激活,我可以找出狀態(diabled /啓用)窗口使用以下命令在DISM特點:我如何檢查是否Windows功能使用C#

dism /online /get-features | more 

有了這個命令我得到一個列表(對不起,德語):

windows features

我能夠通過使用Process()類C#來執行DISM命令。我的下一個任務是將此列表解析爲KeyValuePairs的List,並比較我所需功能的狀態。但這似乎很不方便且容易出錯。

是否有任何穩定的方法來檢查特定的窗口功能是否被激活?

(我使用的.NET Framework 4.5)

我想激活的功能: - Windows Server 2008的 - 在Windows Server 2008 R2 - Windows 7的 - Windows 8的 - Windows 8.1中 - 視窗Server 2012中

+2

的re提供了大量用於從.NET創建WMI查詢的示例代碼。有一個名爲[Win32_ServerFeature]的WMI類(http://msdn.microsoft.com/en-us/library/cc280268(v = vs.85).aspx) – 2014-09-24 14:34:53

+0

@Damien_The_Unbeliever:非常感謝您的回答。我忘了列出我想要激活功能的目標操作系統。我更新了我的問題。 'Win32_ServerFeature'似乎只適用於Windows Server 2008和Windows Server 2008 R2。因此,Win32_ServerFeature只適合作爲我的問題的一部分。 – Simon 2014-09-25 06:25:36

+0

嗯,還有['Win32_OptionalFeature'](http://msdn.microsoft.com/en-us/library/ee309383(v = vs.85).aspx)。基本上,如果你想找出操作系統的信息,而且沒有內置.NET的東西來直接支持它,那麼你應該考慮的下一個地方是WMI類。 – 2014-09-25 12:22:22

回答

0

下面是我使用的是從一個實例得到某處(最有可能的SO)類:

 ManagementClass objMC = new ManagementClass("Win32_ServerFeature"); 
     ManagementObjectCollection objMOC = objMC.GetInstances(); 
     foreach (ManagementObject objMO in objMOC) 
     { 
      string featureName = (string)objMO.Properties["Name"].Value; 

      //add to my list 
      InstalledFeatures.Add(featureName); 

      if (BadRoles.Contains(featureName)) 
       DetectedBadRoles.Add(featureName); 
     }