Как мы знаем, Windows Server 2016 поставляется с опцией установки рабочего стола во время установки ОС. Если это будет сделано, приведенный ниже фрагмент программы не будет обнаружен, даже если установлен Desktop Experience.
IEnumWbemClassObject* pEnumerator = NULL;
hr = pSvc->ExecQuery(
bstr_t("WQL"),
bstr_t("SELECT ID FROM Win32_ServerFeature"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator);
hr = pEnumerator->Next(WBEM_INFINITE,1,&pclsObj,&uReturn);
if(0 == uReturn)
{
break;
}
VARIANT vtProp;
hr = pclsObj->Get(L"ID",0,&vtProp,0,0);
Эта переменная pEnumerator не содержит идентификатор компонента Desktop Experience, который равен 35.
Это ожидаемое поведение в Windows Server 2016?
Если нет, то как мы можем получить это значение в WIndows Server 2016?
Раздел реестра в этом MSDN Link остается в силе, хотя другие методы больше не работают в 2016 году.
Если вы хотите извлечь значение из реестра, оно находится в следующем месте:
HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows NT \ CurrentVersion \ InstallationType
Для 2016 Desktop Experience значение REG_SZ равно «Сервер». Для 2016 года значение «Ядро сервера»
Windows 2016 не рассматривает возможности рабочего стола как функцию, поскольку ее уже нельзя изменить на лету.
Других решений пока нет …