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

标签 c++ windows windows-server-2016

据我们所知,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/

相关文章:

x86 Windows 上使用 STDCALL ABI 的闭包会导致 LibFFI 3.2.1 出现堆栈溢出异常

c# - 在 Windows 服务器上运行 Vanilla ASP.NET-Core 网站获取消息 "Did you mean to run dotnet SDK commands"

c++ - 使用 CMake、Clang 和 Ninja 在 Windows 上构建 c++ 项目

c++ - 不一致的 clock_gettime 性能

c++ - 在类的初始化过程中会发生什么?

python - 无法从 python-ldap 连接到 Windows Server 2016 上的 ldaps

vb6 - 将 VB6 编译为 Server 2016 上的后台进程

C++ vector 问题 - 'LNK2001: unresolved external symbol private: static...'

windows - 是否需要 FlushFileBuffers 才能跨多个进程同步文件数据?

c++ - 如何使用 Native Wifi API C++ 获取 MAC 地址和 channel 信息