我们知道Windows Server 2016附带了在操作系统安装时间安装桌面体验的选项,如果这样做,即使安装了桌面体验,下面的程序代码段也无法检测到。
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变量不包含桌面体验功能ID,即35。
这是Windows Server 2016中的预期行为吗? 如果不是,我们如何在WIndows Server 2016中获得此值?
答案 0 :(得分:1)
此MSDN Link中的注册表项仍然有效,即使其他方法在2016年不再有效。
如果要从注册表中提取值,它将位于以下位置:
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ InstallationType
对于2016桌面体验,REG_SZ值是"服务器" 对于2016年,价值是"服务器核心"
Windows 2016并不认为桌面体验是一项功能,因为它无法再动态更改。