Come sapere che il mio processore è a 32 o 64 bit in C#?Come sapere che il mio processore ha 32 o 64 bit in C#?
risposta
è possibile interrogare il WMI classe Win32_Processor
utilizzando System.Management.ManagementObject
:
ManagementObject mo;
mo = new ManagementObject("Win32_Processor.DeviceID='CPU0'");
ushort i = (ushort)mo["Architecture"];
switch (i)
{
case 0:
return "32 Bit";
break;
case 9:
return "64 Bit";
break;
}
Date un'occhiata a the MSDN Library description per altri codici del processore.
Un problema con questo è che l'utente, che esegue il programma, ha bisogno di privilegi per la visualizzazione del WMI.
Il modo più semplice per controllare in modo nativo in C# è:
var size = IntPtr.Size;
dimensioni sarà uguale a 4 o 8, ma il problema più grande è il motivo per cui avete bisogno di sapere?
Questo non indica il tipo di processore, ma solo l'applicazione corrente. – Guffa
Se si desidera solo scoprire se l'applicazione corrente è in esecuzione come un'applicazione a 32 bit o un'applicazione a 64 bit, è sufficiente utilizzare la proprietà IntPtr.Size
.
int bits = IntPtr.Size * 8;
Per trovare informazioni sul processore reale è più difficile. Here is a library che ottiene alcune informazioni, ma la pagina non dice se ottiene quelle informazioni specifiche. È possibile get some information from the registry, non ho controllato quante informazioni ci sono.
È anche possibile utilizzare P/Invoke per chiamare GetNativeSystemInfo e ottenere una struttura SystemInfo.
Un'altra soluzione si presenta così:
isWow64 = false;
if (System.Environment.OSVersion.Version.Major >= 5 &&
System.Environment.OSVersion.Version.Minor >= 1)
{
var processHandle = GetProcessHandle((uint)
System.Diagnostics.Process.GetCurrentProcess().Id);
bool retVal;
if (!NativeMethods.IsWow64Process(processHandle, out retVal))
{
throw (new Win32Exception());
}
isWow64 = retVal;
}
soluzione alternativa (ma non consigliato) :)
public bool Is64bitOS
{
get
{
return Environment.GetEnvironmentVariable("ProgramFiles(x86)")
!= null;
}
}
public string ProgramFilesX86
{
get
{
string programFiles =
Environment.GetEnvironmentVariable("ProgramFiles(x86)");
if (programFiles == null)
{
programFiles = Environment.GetEnvironmentVariable(
"ProgramFiles");
}
return programFiles;
}
}
Query classe Win32_Processor tramite WMI
È possibile ottenere la CPU (e altro) informazioni dal registro:
HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor
Dispone di 1 o più sottochiavi (uno per ciascun core) chiamati 0, 1, 2, ecc. Ciascuna sottochiave contiene informazioni sul nucleo, incluso l'identificatore che contiene x86 o 64 bit nel testo, inclusi famiglia e modello del processore.
Questo è corretto, ma solo su macchine Windows. Non penso che funzionerà per le app Silverlight, Phone 7 o per le app in esecuzione su mono/linux. – matt
[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool IsWow64Process([In] IntPtr hProcess, [Out] out bool lpSystemInfo);
public static bool Is64Bit()
{
bool retVal;
IsWow64Process(Process.GetCurrentProcess().Handle, out retVal);
return retVal;
}
Cosa c'è di sbagliato in Environment.Is64BitOperatingSystem? –
per chiunque utilizzi .NET 4.0 o più recente, v'è un built-in proprietà System.Environment.Is64BitOperatingSystem
per darvi questa informazione.
- 1. Come posso verificare se il mio programma è compilato per processore a 32 o 64 bit?
- 2. iPhone OS 64 bit o 32 bit?
- 3. dimensioni della macchina 64 o 32 bit
- 4. Attributo struct differente basato su 32 bit o 64 bit
- 5. Come ottenere informazioni sul computer? [32 bit o 64 bit]
- 6. Esecuzione di codice assembly a 32 bit su un processore Linux a 64 bit e 64 bit: Spiegazione dell'anomalia
- 7. Come verificare il kernel 32-bit/64-bit per Linux
- 8. SQL Server 2012 a 32 bit o 64 bit su computer a 64 bit?
- 9. Compatibilità Java 32-bit vs 64-bit
- 10. Devo usare Python 32 bit o Python 64 bit
- 11. Come determinare se un'applicazione .NET è 32 o 64 bit?
- 12. Interop da 64 a 32 bit - come?
- 13. 64 bit per divisione 32 bit
- 14. Esegui libreria a 32 bit su iPhone 5s 64 bit
- 15. Confuso sulla creazione di 32 o 64 bit
- 16. Build 32-bit con llvm-gcc a 64 bit
- 17. Come faccio a sapere se il mio IE è a 64 bit? (Anche per Java?)
- 18. Come posso sapere se il mio GCC sta compilando 64 bit per impostazione predefinita?
- 19. Come ottenere il percorso assoluto del file dipende Windows a 32-bit o 64-bit macchina
- 20. Come scrivere codice convertibile, 32 bit/64 bit?
- 21. Come dovrebbe funzionare l'applicazione nelle architetture intel a 64 bit contro 32 bit?
- 22. Riferimento ODP Oracle.DataAccess.DLL 32/64 bit
- 23. Applicazione a 32 o 64 bit su sistema operativo a 64 bit?
- 24. SDK Android a 32 o 64 bit su sistema operativo Windows a 64 bit?
- 25. Come posso sapere se il mio server esegue mongodb 64 bit?
- 26. Accesso a file da 2,3,4 GB in processo a 32 bit su Windows a 64 bit (o 32 bit)
- 27. Test di Visual Studio Unit 32-bit e 64-bit
- 28. .net console app 32 vs 64 bit
- 29. Come può il mio programma determinare se è in esecuzione su Windows a 32 o 64 bit?
- 30. Esegui AnyCPU come 32-bit su sistemi 64-bit
Posso interrogare la classe Win32_Processor (da PowerShell) perfettamente senza privilegi amministrativi. Inoltre, è possibile eseguire query su AddressWidth/DataWidth anziché su architettura perché l'architettura 6 (Itanium) sarebbe anch'essa a 64 bit. Non dare per scontato che ci siano solo x86 e x86_64. – Joey