为什么 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.
编辑:链接主题中的答案完全相同。
在我的 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.
编辑:链接主题中的答案完全相同。