Sytem.Environmentクラスを用いてOSのメジャーバージョンを取得する処理で、作成されたexeファイルにWindows XP互換モードを設定した際の挙動がWin32 APIのそれと異なるようです。実験として、C++/CLIにて以下のようなコードを作成しました。#include "stdafx.h"#include <shlobj.h>using namespace System;int GetOsMajorVersionByDotNet(){ System::OperatingSystem^ os = System::Environment::OSVersion; if (os->Platform == PlatformID::Win32NT) { return os->Version->Major; } return -1;}int GetOsMajorVersionByApi(){ OSVERSIONINFO osVerInfo; unsigned long dwNumber = 0; ::ZeroMemory(&osVerInfo, sizeof(OSVERSIONINFO)); osVerInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if (GetVersionEx(&osVerInfo) == FALSE) { return -1; } return osVerInfo.dwMajorVersion;}int main(array<System::String ^> ^args){ Console::WriteLine("GetOsMajorVersionByApi returns: {0}", GetOsMajorVersionByApi()); Console::WriteLine("GetOsMajorVersionByDotNet returns: {0}", GetOsMajorVersionByDotNet()); return 0;}Windows Vistaにて、上記のソースコードを基に作成したexeファイルに対してファイルのプロパティよりWindows XP互換モードを設定したうえで、exeファイルを実行すると、以下のように出力されます。GetOsMajorVersionByApi returns: 5GetOsMajorVersionByDotNet returns: 6なお、互換モードをWindows NTに設定すると、今度は両方とも4を返しました。Windows XPに設定したときのEnvironmentクラスの返す値だけがなにかおかしいように思います。また、同じコードをWindows 7 RC1にてVisual Studio 2010 Beta/.net Framework 4.0を使用してビルド・実行すると今度はどちらも(Windows XPの設定で)5を返しました。これはつまり、現行では互換モードにおけるEnvironmentクラスの動作に不具合があるように思われます。見解をお願いいたします。