编译应用程序时,您可以将其指定为在 Windows 64 位操作系统上作为本机应用程序或在 WOW64(Windows 64 位下的 Windows 32 位)下运行。 WOW64 是一种兼容性环境,使 32 位应用程序能够在 64 位系统上运行。 WOW64 包含在 Windows作系统的所有 64 位版本中。
在 Windows 上运行 32 位与 64 位应用程序
基于 .NET Framework 4 或更高版本构建的 32 位应用程序在 64 位系统上的 WOW64 下运行。
注释
由于 x86 仿真和 Itanium 处理器系列的 WOW64 子系统的设计,因此应用程序仅限于在一个处理器上执行。 这些因素降低了在基于 Itanium 的系统上运行的 32 位 .NET 应用程序的性能和可伸缩性。 我们建议使用 .NET Framework 4 或更高版本,因为它为基于 Itanium 的系统提供了本机 64 位支持,从而提升性能和可扩展性。
默认情况下,在 64 位 Windows作系统上运行 64 位托管应用程序时,可以创建不超过 2 GB 的对象(GB)。 但是,在 .NET Framework 4.5 及更高版本中,可以增加此限制。 有关详细信息,请参阅 <gcAllowVeryLargeObjects> 元素。
许多程序集在 32 位 CLR 和 64 位 CLR 上运行完全相同。 但是,某些程序的行为可能有所不同,具体取决于 CLR(如果它们包含以下一个或多个):
- 包含根据平台更改大小的成员的结构(例如,任何指针类型)。
- 指针算术包含固定大小。
- 平台调用错误,或使用句柄的
Int32
而非IntPtr
的 COM 声明不正确。 - 将
IntPtr
转换为Int32
的代码。
有关如何将 32 位应用程序移植到 64 位 CLR 上运行的详细信息,请参阅 将 32 位托管代码迁移到 64 位。
常规 64 位编程信息
有关 64 位编程的一般信息,请参阅以下文档:
- 在 Windows SDK 文档中,请参阅 适用于 64 位 Windows 的编程指南。
- 有关创建 64 位应用程序的 Visual Studio 支持的信息,请参阅 Visual Studio IDE 64 位支持。
编译器对创建 64 位应用程序的支持
默认情况下,当您使用 .NET 在 32 位或 64 位计算机上构建应用程序时,该应用程序将在 64 位计算机上作为本机应用程序运行(即,不在 WOW64 下)。 下表列出了文档,这些文档说明了如何使用 Visual Studio 编译器创建 64 位应用程序,这些应用程序可以作为本地程序、在 WOW64 下运行,或两者兼有。
编译器 | 编译器选项 |
---|---|
Visual Basic | -platform (Visual Basic) |
Visual C# | -platform (C# 编译器选项) |
Visual C++ | 可以使用 /clr:safe 创建与平台无关的公共中间语言(CIL)应用程序。 有关详细信息,请参阅 -clr (公共语言运行时编译)。 Visual C++对每个64位操作系统提供单独的编译器。 有关如何使用 Visual C++ 创建在 64 位 Windows作系统上运行的本机应用程序的详细信息,请参阅 64 位编程。 |
确定 .exe 文件或 .dll 文件的状态
若要确定 .exe 文件或 .dll 文件是否仅用于在特定平台上或 WOW64 下运行,请使用没有选项的CorFlags.exe (CorFlags 转换工具)。 还可以使用 CorFlags.exe 更改 .exe 文件或 .dll 文件的平台状态。 Visual Studio 程序集的 CLR 标头的主要运行时版本号设置为 2,次要运行时版本号设置为 5。 将次要运行时版本设置为 0 的应用程序被视为旧版应用程序,并且始终在 WOW64 下执行。
若要以编程方式查询 .exe 或 .dll,以查看它是否仅在特定平台或 WOW64 下运行,请使用该方法 Module.GetPEKind 。