"状态"返回WMI功能为空

时间:2015-11-30 12:50:40

标签: c# windows windows-services wmi wmi-query

我正在将一个安装程序从VBS转换为C#程序。 在此安装中,我必须使用DISM激活一些Windows功能。

"cmd.exe", "/C Dism /Online /Enable-Feature /FeatureName:WAS-ProcessModel" 

我以这种方式激活它们。当我用

手动检查它们时
dism /online /get-featureinfo /featurename:WAS-ProcessModel

在命令提示符下,然后我获取功能的信息,包括状态。 (状态:已激活)

但是当我尝试通过我的程序获取它时,状态返回只是空的。

这是我的计划的相关部分:

ManagementScope scope = new ManagementScope("\\\\.\\ROOT\\cimv2");

//create object query
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_OptionalFeature Where Name=\"WAS-ProcessModel\"");

//create object searcher
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);

//get a collection of WMI objects
ManagementObjectCollection queryCollection = searcher.Get();

//enumerate the collection.
foreach (ManagementObject m in queryCollection)
{
    // access properties of the WMI object

    Console.WriteLine("Caption : {0}" + Environment.NewLine + "Status : {1}", m["Caption"], m["Status"]);

}

返回的是:

Caption : Prozessmodell
Status : 

如何获取该功能的状态? 我做错了什么吗?我是这个DISM / WMI的新手,所以也许这只是我做错了一些基本的事情。

1 个答案:

答案 0 :(得分:2)

正如documentation for the Status property on the Win32_OptionalFeature class所说:

  

“此属性为NULL。”

您需要InstallState属性:

  

标识可选功能的状态。以下是   可能的:

     

启用(1)

     

已禁用(2)

     

缺席(3)

     

未知(4)

您可以将它们添加到枚举中,并使用它来显示输出:

public enum InstallState
{
    Enabled = 1,
    Disabled = 2,
    Absent = 3,
    Unknown = 4
}

...

foreach (ManagementObject m in queryCollection)
{ 
  var status = (InstallState)Enum.Parse(typeof(InstallState), m["InstallState"].ToString());

  Console.WriteLine("Caption : {0}" 
            + Environment.NewLine + "Status : {1}", m["Caption"], status);
}

然后返回:

  

标题:流程模型

     

状态:已启用