PCにインストールされているWindowsのバージョンを識別する必要がある独立したC++コード(つまり、Windowsプログラムではない)があります。
カーネルバージョン(ntoskrnl.exeなど)によって異なるWindowsクライアントリリースを簡単GetFileVersionInfo
に区別できますが、クライアントとサーバーのインストールを区別する信頼できる方法があるかどうか疑問に思っています。
この方法を使用してWindowsVistaSP2とWindowsServer2008 SP2(両方とも6.0ビルド6002)とWindows7とWindowsServer 2008 R2(RTM用の6.1ビルド7600とSP2用の6.1ビルド7601の両方)を区別すると、問題が発生します。 。環境外で実行されているコードに対してクライアントとサーバーのOSを正しく識別するための信頼できる(そしてできればできるだけ簡単に、レジストリを回避することはWin32 APIへのアクセスが利用できないので素晴らしい)方法は何ですか?
サーバーエディションにのみ存在するファイルをチェックできると思います(構成に関係なく、サーバーエディションのインストールで保証される適切なファイルは何ですか?)、Pantherフォルダーをチェックします(削除しても安全なので、保証はありません)、などですが、これは人々が以前に遭遇し、(うまくいけば)よりエレガントに解決した問題だと確信していますか?
(補足:この質問は以前にSOで質問されましたが、ソリューション(WMI)は帯域外チェックには適用できません)