"Статус" возврата функции WMI пуст

Я конвертирую программу установки из VBS в программу на C#. В этой установке мне нужно активировать некоторые функции Windows с помощью DISM.

"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 ответ

Решение

В качестве документации для Status собственность на Win32_OptionalFeature класс говорит:

"Это свойство имеет значение 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);
}

Затем возвращается:

Надпись: Модель процесса

Статус: включен

Другие вопросы по тегам