在我的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位程序一部分。
为什么会这样,以及发生了什么?
答案 0 :(得分:1)
IntPtr.Size由进程本身(或更好地说,构建目标)设置,而不是由操作系统设置。
在c#中使用x86目标的程序构建将始终具有IntPtr.Size = 4,而x64将始终具有IntPtr.Size = 8.这实际上是对进程的检查,而不是操作系统。
编辑:链接主题中的答案完全相同。