如何使用C#检查Windows功能是否已激活

3
我的研究表明,我可以通过以下命令在DISM上找到Windows功能的状态(禁用/启用):
dism /online /get-features | more

使用此命令,可以获得一个列表(很抱歉是德语): windows features 我能够使用C#中的Process()类执行dism命令。我的下一个任务是将此列表解析为KeyValuePairs列表,并比较所需功能的状态。但这似乎不方便且容易出错。
是否有稳定的方法来检查特定Windows功能是否已激活?
(我正在使用.NET Framework 4.5)
我想为以下操作系统激活功能: - Windows Server 2008 - Windows Server 2008 R2 - Windows 7 - Windows 8 - Windows 8.1 - Windows Server 2012

2
有很多关于从.NET进行WMI查询的示例代码。有一个名为Win32_ServerFeature的WMI类。 - Damien_The_Unbeliever
@Damien_The_Unbeliever:非常感谢您的回答。我忘记列出我想要激活功能的目标操作系统。我已经更新了我的问题。Win32_ServerFeature似乎只能在Windows Server 2008和Windows Server 2008 R2上工作。因此,Win32_ServerFeature只适用于我的问题的一部分。 - Simon
1
好的,还有Win32_OptionalFeature。基本上,如果你想要查找操作系统信息,并且没有内置到.NET中直接支持它的东西,那么你下一个应该考虑的地方就是WMI类。 - Damien_The_Unbeliever
1个回答

0

这是我从某个地方(很可能是Stack Overflow)获得的一个类的示例:

        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);
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接