我有一些独立的 C++ 代码(即不是 Windows 程序)需要识别 PC 上安装的 Windows 版本。
我可以通过内核版本(例如在 ntoskrnl.exe 上)轻松区分不同的 Windows 客户端版本GetFileVersionInfo
,但是我想知道是否有一种可靠的方法来区分客户端和服务器安装。
使用此方法区分 Windows Vista SP2 和 Windows Server 2008 SP2(两者均为 6.0 build 6002)和 Windows 7 和 Windows Server 2008 R2(用于 RTM 的 6.1 build 7600 和用于 SP2 的 6.1 build 7601,两者)时会出现问题. 对于在环境外运行的代码,正确识别客户端与服务器操作系统的可靠方法是什么(最好尽可能直接,避免注册表会很好,因为无法访问 Win32 API)?
我想我可以检查仅存在于服务器版本上的文件(无论配置如何,保证在任何服务器版本安装上都有什么好文件?),检查 Panther 文件夹(可以安全删除,所以不能保证),等等,但我敢肯定这是人们以前遇到过的问题,并且(希望)更优雅地解决了?
(旁注:这个问题之前已经在 SO 上提出过,但解决方案(WMI)不适用于带外检查)