Dalle mie indagini non c’è una classe .Net per determinare se si è su un SO a 64bit… possibile??

Girando sui vari forum ho trovato queste tre alternative (ma solo 2 mi rispondono che sono a 64 sul mio Vista x64 con sp2 appena fatto…)

 

Metodo 1: IntPtr

   1:  public static bool Is64BitSimple()
   2:  {
   3:      if (IntPtr.Size == 8)
   4:          return true;
   5:      else
   6:          return false;
   7:  }

 

Medoto 2: WMI

   1:  public static bool Is64bitWMI()
   2:  {
   3:      bool is64 = false;
   4:      try
   5:      {
   6:          ManagementObjectSearcher searcher;
   7:          searcher = new ManagementObjectSearcher("SELECT AddressWidth FROM Win32_Processor");
   8:          ManagementObjectCollection collection = searcher.Get();
   9:          foreach (ManagementObject obj in collection)
  10:          {
  11:              is64 = (UInt16)(obj["AddressWidth"]) == (UInt16)64;
  12:          }
  13:      }
  14:      catch (Exception ex)
  15:      {
  16:      }
  17:      return is64;
  18:  }

 

Metodo 3: non mi va…

   1:  [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] 
   2:  [return: MarshalAs(UnmanagedType.Bool)] 
   3:  public static extern bool IsWow64Process([In] IntPtr hProcess, [Out] out bool lpSystemInfo); 
   4:  public static bool Is64Bit() 
   5:  { 
   6:      bool retVal; 
   7:      IsWow64Process(Process.GetCurrentProcess().Handle, out retVal); 
   8:      return retVal; 
   9:  } 

 

 

Se qualcuno ha dritte faccia un fischio