2016-09-28 10 views
1

Я пытаюсь получить архитектуру компьютера, выполняющего мое программное обеспечение, и до сих пор он работает хорошо в Windows, но он не работает в Linux и OSX. Позвольте мне показать мой текущий код:Проверка архитектуры для Linux и Mac

//--Check processor architecture-- 
string strProcArchi = System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE"); 
string strProcArchiBis = System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432"); 

if((strProcArchi != null && strProcArchi.IndexOf("64") > 0) || (strProcArchiBis != null && strProcArchiBis.IndexOf("64") > 0)) 
{ 
    Console.WriteLine("Processor is 64-bit"); 
} 
else 
{ 
    Console.WriteLine("Processor is 32-bit"); 
} 
//------ 

Linux и Mac всегда возвращаются «Процессор 32-разрядный», так что я думаю, что эти переменные окружения не используются за пределами Windows. Я уже несколько дней ищу работу в Интернете, но не могу найти ничего конкретного. Любые идеи о том, как достичь этого? Мне нужно загрузить различные активы, независимо от того, выполняется ли на нем 32-разрядный или 64-разрядный компьютер, поэтому эта проверка определенно важна.

Я под .NET 2.0, и я не могу использовать Environment.Is64BitOperatingSystem или Environment.Is64BitProcess, так как это особенность .NET 4.0.

Заранее спасибо.

+0

Работает ли 'Environment.Is64BitOperatingSystem' или' Environment.Is64BitProcess'? –

+0

Нет, извините, я должен был это разъяснить. Я под .NET 2.0, и это особенность .NET 4.0. Но спасибо вам все равно :) – Neper

+0

Прошло совсем немного времени, так как у Mac были 32-битные процессоры, как вы можете видеть здесь [https://support.apple.com/en-gb/HT201948]. – TheDarkKnight

ответ

1

Для обнаружения разрядности вашего .NET процесса выполнения (моно процесс в вашем случае), вы можете проверить IntPtr.Size == 8 и обнаружить разрядность процессора можно разобрать вывод sysctl hw.cpu64bit_capable команды на OSX и вывод cat /proc/cpuinfo | grep "flags" | grep " lm " команды на Linux.

+0

Привет, ярик, и спасибо. Это бесполезно для меня, поскольку исполняемый файл уже основан на 32-битной основе, мне нужно знать, является ли битва процессора вне моей программы. – Neper

+0

@Neper В этом случае вы можете проанализировать вывод команды 'sysctl hw.cpu64bit_capable' на OSX и вывод' cat/proc/cpuinfo | grep "flags" | Команда grep "lm" для Linux. – jariq

+0

Ницца, обязательно попробуй это. – Neper