";状态“;WMI功能的返回为空

本文关键字:返回 功能 WMI quot 状态 | 更新日期: 2023-09-27 18:25:13

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

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

我用这种方式激活了它们。当我用手动检查它们时

dism /online /get-featureinfo /featurename:WAS-ProcessModel

在命令提示符中,然后我获得Feature的信息,包括Status。(状态:激活)

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

这里是我的程序的相关部分:

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的新手,所以也许这只是我做错了一些基本的事情。

";状态“;WMI功能的返回为空

正如Win32_OptionalFeature类上Status属性的文档所说:

"此属性为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);
}

然后返回:

描述:过程模型

状态:启用