64 位应用程序

更新:2007 年 11 月

可以对应用程序进行编译,并将其指定为在 64 位操作系统上作为本机应用程序运行或在 WOW64 下运行。WOW64 是一个由操作系统提供的兼容性环境,它使得 32 位应用程序能够在 Windows 64 位操作系统上运行。

备注

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

在 x86 计算机上,Visual Studio 将安装 32 位的 CLR 2.0 版,而在 64 位 Windows 计算机上,它将同时安装 32 位和合适的 64 位 CLR 2.0 版。(Visual Studio 2008 是一个 32 位应用程序,当安装到 64 位 Windows 操作系统上时,它将在 WOW64. 下运行。)

说明:

由 x86 模拟和 Itanium 处理器系列的 WOW64 子系统的设计所决定,应用程序只限于在一个处理器上执行。单处理器执行和 x86 模拟降低了 32 位 .NET Framework 应用程序在基于 Itanium 的系统上运行时的性能和伸缩性。建议将使用 .NET Framework 1.1 版的应用程序用作交互式客户端应用程序,而不要用作要求高性能或伸缩性的应用程序,如高负载 ASP.NET 应用程序。您应当考虑使用 .NET Framework 2.0 版,该版本包括对基于 Itanium 的系统的本机 64 位支持,并改进了性能和伸缩性。

就像 32 位 Windows 操作系统一样,在 64 位 Windows 操作系统上运行 64 位托管应用程序时,可以创建的对象的大小也有一个 2GB 的限制。

许多情况下,程序集在 32 位或 64 位 CLR 上可以同等地运行。在 64 位 CLR 上运行时,导致程序的行为发生改变的一些原因有:

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

  • 指针算法中包含固定大小。

  • 不正确的平台调用或 COM 声明,对句柄使用 Int32,而不是 IntPtr。

  • 将 IntPtr 强制转换为 Int32。

有关移植 32 位应用程序以便在 64 位 CLR 上运行的更多信息,请参见 https://msdn2.microsoft.com/zh-cn/library/ms973190.aspx

一般 64 位编程信息

有关 64 位编程问题的一般信息,请参见

有关 Visual Studio 开发环境中对创建 64 位应用程序的支持的信息,请参见 Visual Studio 开发环境 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 创建平台不可知的 MSIL 应用程序;有关更多信息,请参见 /clr(公共语言运行库编译)

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

JScript

/platform (JScript)

确定 .exe 或 .dll 的状态

在命令行使用 corflags.exe 可以确定某个 .exe 或 .dll 是仅可以在特定平台上运行,还是可以在 WOW64 下运行。还可以使用 corflags.exe 来更改 .exe 或 .dll 的平台状态。有关更多信息,请参见 CorFlags 转换工具 (CorFlags.exe)。Visual Studio 程序集的 CLR 头(或 COM+ 运行时头)的主运行时版本号设置为 2,次运行时版本号设置为 5。在 Visual Studio 2003 程序集中,它们分别为 2 和 0。所有次运行时版本设置为 0 的应用程序都将被视为旧版应用程序,在 64 位计算机上它们将始终在 WOW64 下执行。

使用 GetPEKind 可以通过编程方式查询 .exe 或 .dll,以确定它是仅可以在特定平台上运行,还是可以在 WOW64 下运行。

请参见

其他资源

基于 Windows 的应用程序、组件和服务