none
请教:如何在运行时判断程序集是32位状态运行还是64位状态运行? RRS feed

  • 问题

  • 相关的问题如下:

    1. 以AnyCPU方式编译的程序集能在32位和64位环境系统下运行(程序集以插件动态加载的形式在32的宿主程序和64位版的宿主程序内运行<64位时操作系统也是64位的>)?AnyCPU方式编辑的程序集能自动适应32位环境和64位环境吗?

    2. 在运行时如何在程序集内判断当前的运行状态是32位还是64位?

    谢谢,

    2009年5月11日 6:49

答案

  • 你好!
    1.anycpu(默认值)将程序集编译为在任意平台上运行
    2.获取操作系统是 32 和 64 位可以通过以下方式得知
    a> 判断 System.IntPtr.Size, System.IntPtr.Size == 4 // 32 位 System.IntPtr.Size == 8 //64位
    b> 利用 API


    知识改变命运,奋斗成就人生!
    • 已标记为答案 爱自己 2009年5月11日 8:02
    2009年5月11日 7:18
    版主

全部回复

  • 你好!
    1.anycpu(默认值)将程序集编译为在任意平台上运行
    2.获取操作系统是 32 和 64 位可以通过以下方式得知
    a> 判断 System.IntPtr.Size, System.IntPtr.Size == 4 // 32 位 System.IntPtr.Size == 8 //64位
    b> 利用 API


    知识改变命运,奋斗成就人生!
    • 已标记为答案 爱自己 2009年5月11日 8:02
    2009年5月11日 7:18
    版主
  • isWow64 = false;
    if (System.Environment.OSVersion.Version.Major >= 5 && 
         System.Environment.OSVersion.Version.Minor >= 1)
    {
         SafeProcessHandle processHandle = GetProcessHandle((uint)System.Diagnostics.Process.GetCurrentProcess().Id);
         bool retVal;
         if (!NativeMethods.IsWow64Process(processHandle, out retVal))
         {
         throw (new Win32Exception());
         }
         isWow64 = retVal;
    }

    MSMVP VC++
    • 已建议为答案 Chao Kuo 2010年3月17日 3:45
    2009年5月12日 17:44
    版主