"Статус" возврата функции 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);
}
Затем возвращается:
Надпись: Модель процесса
Статус: включен