如何以编程方式检查Windows Server 2016上是否安装了桌面体验

How to programmatically check if the desktop experience is installed or not on Windows Server 2016

本文关键字:是否 安装 体验 桌面 2016 Server 编程 方式 Windows 检查      更新时间:2023-10-16

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

这个MSDN链接中的注册表项仍然有效,即使其他方法在2016年不再工作。

如果您想从注册表中提取值,它位于以下位置:

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionInstallationType

对于2016桌面体验,REG_SZ值为"服务器";2016年的值是"服务器核心"

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