为什么 32 位可执行文件在 WoW64 下不是 运行?

Why is 32 bit executable not running under WoW64?

在我的 32 位系统 (Windows 10) 上,我创建了一个非常简单的 Windows Forms (.NET FW 3.5) 应用程序:

        bool x86 = IntPtr.Size == 4;

        if (x86)
        {
            label1.Text = "OS: 32 bit";
        }
        else // IntPtr.Size == 8
        {
            label1.Text = "OS: 64 bit";

            // For following method, see:
            // 
            if (InternalCheckIsWow64())
            {
                label1.Text += "; 32 bit program running under WoW64";
            }
        }

在 Visual Studio 2015 年,在 Properties -> Build 下,我将 Platform Target 设置为 x86。

我将此可执行文件转换为 64 位 Windows Server 2012 Datacenter 版本,运行。我完全希望看到它在 WoW64 下将自己报告为 运行,但惊讶地发现情况并非如此;它只报告体系结构是 64 位,但不显示“; 32 位程序 运行 under WoW64”部分。

这是为什么,这是怎么回事?

IntPtr.Size 由进程本身设置(或者更好地说,构建目标),而不是由 OS.

在 c# 中使用 x86 目标构建的程序将始终具有 IntPtr.Size = 4,而 x64 将始终具有 IntPtr.Size = 8。这实际上是对进程的检查,而不是OS.

编辑:链接主题中的答案完全相同。