C++ 以编程方式检查是否安装了windows server 2016桌面体验

C++ 以编程方式检查是否安装了windows server 2016桌面体验,c++,windows,window-server,windows-server-2016,C++,Windows,Window Server,Windows Server 2016,正如我们所知,Windows Server 2016附带了一个选项,可以在操作系统安装期间安装桌面体验,如果这样做,即使安装了桌面体验,下面的程序片段也无法检测到 IEnumWbemClassObject* pEnumerator = NULL; hr = pSvc->ExecQuery( bstr_t("WQL"), bstr_t("SELECT ID FROM Win32_ServerFeature"), WBEM_FLAG_F

正如我们所知,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中获取此值?

此中的注册表项仍然有效,即使其他方法在2016年不再有效

如果要从注册表中提取值,该值位于以下位置:

HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallationType

对于2016年桌面体验,REG_SZ值为“服务器” 2016年的价值是“服务器核心”

Windows 2016不认为桌面体验是一个特性,因为它不能在飞行中被改变。