【发布时间】:2017-05-11 13:25:00
【问题描述】:
在我的 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:
// 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位,但不显示“; 32位程序在WoW64下运行”部分。
为什么会这样,发生了什么?
【问题讨论】:
-
等等。标签实际上设置为“OS:64 位”,构建目标设置为 x86?
-
是的,32 位应用程序可以在 64 位系统上运行。
-
这不是我的问题。据我记得,将构建设置为 x86,应该强制 IntPtr.Size 为 4(因为该过程将是一个 32 位进程(这正是我现在在我的 PC 上的测试控制台应用程序中看到的行为) ))。这就是为什么我问,如果在这种情况下标签真的设置为“OS:64 位”。
-
嗯,你是对的。平台:任何 CPU,平台目标:x86,在 64 位服务器上,它显示“OS:32 位”。这是一个全新的转折。我的基本理解,无论如何都是摇摇欲坠的,现在被枪杀了。
-
我将 if 语句倒置,修复它,现在它可以正常工作了。请将您的原始评论发布为答案,以便我将其标记为答案。非常感谢。