none
请教在64位和32位系统上编写程序的问题,谢谢! RRS feed

  • 问题

  • 服务器为Windows Server 2008 (64位,中文),装有Sql Server 2008 (64位,中文)。

    1、如果我的PC是XP(32位),上面需要运行一个.net编写的程序来连接数据库进行增、删、改、查的操作。可否实现?编写这个程序需要注意什么?稳定性如何?

    2、如果我还想编写一个Web services 或者WCF放在服务器上使用,客户机还是32位,这个又需要如何实现呢,有没有需要注意的地方?

    因为没有接触过这些,所以想请大家尽量详细解答一下,无限感激!

    2010年9月16日 1:59

答案

  • 从 Visual Studio 2005 开始,您可以对应用程序进行编译,并将其指定为在 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 2005 将安装 32 位的 CLR 2.0 版,而在 64 位 Windows 计算机上,它将同时安装 32 位和合适的 64 位 CLR 2.0 版。(Visual Studio 2005 是一个 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 上运行的更多信息,请参见 http://msdn.microsoft.com/library/?url=/library/en-us/dndotnet/html/64migrate.asp。

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

    http://msdn.microsoft.com/netframework/programming/64bit/

    Introducing 64-bit Windows(Platform SDK 文档,也可以在 MSDN 网站上找到)

    有关下载公共语言运行库的 64 位版本的信息,请参见 http://www.microsoft.com/china/msdn/download/default.mspx。

    有关 Visual Studio 开发环境中对创建 64 位应用程序的支持的信息,请参见 Visual Studio 开发环境 64 位支持。

    创建 64 位应用程序的编译器支持
    默认情况下,使用 .NET Framework 2.0(在 32 位或 64 位计算机上)生成的应用程序将在 64 位计算机上作为本机应用程序运行(而不是在 WOW64 下运行)。下表列出的主题探讨了如何使用 Visual Studio 编译器来创建 64 位应用程序,使之可以作为本机应用程序运行或在 WOW32 下运行,或者兼具这两种运行形式:

    编译器  编译器选项 
    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 位编程。

    Visual J#
    在 Visual Studio 2005 中,Visual J# 编译器仅可以创建 32 位应用程序。在 64 位 Windows 操作系统上运行时,使用 Microsoft Visual J# 2005 编译的应用程序将在 WOW64 下运行。(即使对于不发出 JDK 调用的应用程序,Visual J# 编译器所依赖的 JDK 二进制文件仍是 32 位。)

    如果平台不可知的映像在 64 位 Windows 操作系统上加载了 Visual J# .dll,则发出调用的应用程序将在运行时失败。

    JScript
    /platform (JScript)


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

    使用 GetPEKind 可以通过编程方式查询 .exe 或 .dll,以确定它是仅可以在特定平台上运行,还是可以在 WOW64 下运行。
    2010年9月17日 2:47
    版主