64 位应用程序

编译应用程序时,您可以将其指定为在 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 位编程的一般信息,请参阅以下文档:

编译器对创建 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