据我们所知,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 变量不包含 35 的桌面体验功能 ID。
这是 Windows Server 2016 中的预期行为吗?
如果不是,我们如何在 Windows Server 2016 中获取此值?
最佳答案
此 MSDN Link 中的注册表项仍然有效,即使其他方法在 2016 年不再有效。
如果您想从注册表中提取值,它位于以下位置:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallationType
对于 2016 桌面体验,REG_SZ 值为“服务器” 2016 年的值为“服务器核心”
Windows 2016 不将桌面体验视为一项功能,因为它不能再即时更改。
关于c++ - 如何以编程方式检查 Windows Server 2016 上是否安装了桌面体验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39116164/