0

我有一些独立的 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)不适用于带外检查)

4

3 回答 3

0

我最终在 system32 目录中搜索了一些通常与 Windows 服务器版相关联的二进制文件。它不是很干净,但在实践中效果很好。

于 2012-12-14T19:13:01.730 回答
0

我不完全确定你所说的带外检查是什么意思,所以我暂时忽略它。

正常的方法是调用GetVersionEx,然后查看 的wProductType成员OSVERSIONINFOEX

于 2012-05-11T03:30:00.160 回答
0

PE 映像没有指定该映像应该在客户端还是服务器上工作。它仅指定有关子系统、依赖项、内存、亲和性等的运行时要求......

于 2012-05-11T07:22:03.740 回答