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

时间:2017-05-11 04:33:24

标签: c# x86 wow64

在我的32位系统(Windows 10)上,我创建了一个非常简单的Windows窗体(.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:
            // http://stackoverflow.com/a/336729/360840
            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位,但不显示&#34 ;;在WoW64"下运行的32位程序一部分。

为什么会这样,以及发生了什么?

1 个答案:

答案 0 :(得分:1)

IntPtr.Size由进程本身(或更好地说,构建目标)设置,而不是由操作系统设置。

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

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