64 位应用程序

更新:2010 年 8 月

编译应用程序时,您可以将其指定为在 Windows 64 位操作系统上作为本机应用程序运行或在 WOW64 下运行。 WOW64 是一个兼容性环境,它使得 32 位应用程序能在 64 位系统上运行。 WOW64 包含在系统中。

备注

所有在 .NET Framework 1.0 或 1.1 版上生成的应用程序都会被视为 32 位应用程序,并且在 64 位操作系统上,始终在 WOW64 下的 32 位公共语言运行时 (CLR) 上运行。 此外,在 .NET Framework 4 版 上生成的 32 位特定应用程序将会在 64 位系统上的 WOW64 下运行。

在 x86 计算机上,Visual Studio 会安装 CLR 的 32 位版本,而在 64 位 Windows 计算机上会同时安装 CLR 的 32 位版本和适当的 64 位版本。 (因为 Visual Studio 2010 是一个 32 位应用程序,所以当安装到 64 位系统上时,它会在 WOW64 下运行。)

注意注意

由 x86 模拟和 Itanium 处理器系列的 WOW64 子系统的设计所决定,应用程序只限于在一个处理器上执行。因为这些因素,运行于基于 Itanium 的系统上的 32 位 .NET Framework 应用程序的性能和伸缩性有所下降。我们建议将使用 .NET Framework 1.1 的应用程序用作交互式客户端应用程序,而不要用作要求高性能或高伸缩性的应用程序,例如高负载 ASP.NET 应用程序。如果可以,请使用 .NET Framework 4 版,它包括对基于 Itanium 的系统的本机 64 位支持,以提升性能和伸缩性。

在 64 位 Windows 操作系统上运行 64 位托管应用程序时,您可以创建不超过 2 GB 的对象。

许多程序集在 32 位 CLR 和 64 位 CLR 下运行情况完全相同。 然而,因为下列某个或多个原因,对于不同的 CLR,某些程序可能会有不同表现:

  • 结构中包含大小随平台而改变的成员,例如任何指针类型。

  • 指针算法包含常量大小。

  • 平台调用不正确,或者 COM 声明将 Int32 而不是 IntPtr 用于句柄。

  • IntPtr 强制转换为 Int32

有关如何调整 32 位应用程序以在 64 位 CLR 上运行的更多信息,请参见 MSDN 网站上的 Migrating 32-bit Managed Code to 64-bit(将 32 位托管代码迁移至 64 位)。

常规 64 位编程信息

有关 64 位编程的常规信息,请参见以下文档:

对于创建 64 位应用程序的编译器支持

默认情况下,如果使用 .NET Framework 2.0 在 32 位或 64 位计算机中生成一个应用程序,该应用程序将会在 64 位计算机中作为本机应用程序运行(即不是在 WOW64 下运行)。 有关如何使用 Visual Studio 编译器创建 64 位应用程序,并且应用程序会作为本机应用程序运行和/或在 WOW64 下运行的信息,请参见下表中的文档。

编译器

编译器选项

Visual Basic

/platform (Visual Basic)

Visual C#

/platform(C# 编译器选项)

Visual C++

您可以使用 /clr:safe 创建不限于特定平台的 Microsoft 中间语言 (MSIL) 应用程序。 有关更多信息,请参见 /clr(公共语言运行时编译)

Visual C++ 附带有适用于每种 64 位操作系统的不同编译器。 有关如何使用 Visual C++ 创建可在 64 位 Windows 操作系统上运行的本机应用程序的更多信息,请参见 Visual C++ 64 位编程

JScript

/platform (Visual Studio - JScript)

确定 .exe 文件或 .dll 文件的状态

若要确定 .exe 文件或 .dll 文件是否只能在某个特定平台中运行还是可在 WOW64 下运行,请在命令提示符下使用 corflags.exe。 也可以使用 corflags.exe 更改 .exe 文件或 .dll 文件的平台状态。 有关更多信息,请参见 CorFlags.exe(CorFlags 转换工具)。 Visual Studio 程序集的 CLR 头(或 COM+ 运行时头)的主运行时版本号设置为 2,而次运行时版本号设置为 5(在 Visual Studio .NET 2003 程序集中为 0)。 次运行时版本设置为 0 的应用程序都将被视为旧版应用程序,并将始终在 WOW64 下执行。

若要通过编程方式查询 .exe 或 .dll 以确定它们是否只能在某个特定平台中运行,还是可以在 WOW64 下运行,请使用 GetPEKind 方法。

请参见

其他资源

Windows-Based Applications and Components

修订记录

日期

修订记录

原因

2010 年 8 月

更新了链接和版本号。

信息补充。