Я хотел бы предложить своим пользователям правильные ссылки на обновленную версию моей программы в зависимости от того, на какой платформе они работают, поэтому мне нужно знать, работаю ли я в настоящее время на ОС x86 или на ОС x64.
Лучшее, что я нашел, - это использование Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE"), но я думаю, что для этого есть какое-то встроенное средство?





Проверьте размер IntPtr с помощью Marshal.SizeOf. 32 бита = 4 байта, 64 бита = 8 байтов.
Обновлено: я не уверен, что это то, что вы ищете, после повторного прочтения вопроса.
Это будет различать 32-битную и 64-битную платформу, хотя 64-битная платформа может быть, скажем, Itanium, а не x64. (Вряд ли, я знаю, но возможно.)
Вам не нужно использовать Marshal.SizeOf, вы можете просто использовать IntPtr.Size
@millenomi: Или даже 64-битный ARM.
Проверяйте только IntPtr.Size. У вас должна быть целевая платформа AnyCPU.
(Я понимаю, что это другое, но лучше всего указать на это в комментарии к другому ответу. Но я также понимаю, что, вероятно, в тот день даже не было комментариев и / или у вас не было достаточно репутации, чтобы сделать их .. .)
Позвоните в IsWow64Process, чтобы узнать, работает ли ваш 32-разрядный процесс в WOW64 в 64-разрядной операционной системе. Вы можете вызвать в GetNativeSystemInfo, чтобы узнать, что это такое: wProcessorArchitecture member для SYSTEM_INFO будет PROCESSOR_ARCHITECTURE_INTEL для 32-разрядной версии, PROCESSOR_ARCHITECTURE_AMD64 для x64 и PROCESSOR_ARCHITECTURE_IA64 для Intel Itanium.
Вы можете многое определить с помощью переменных окружения, используемых в C# - Как получить программные файлы (x86) в 64-разрядной версии Windows [И это оказалось для меня лучше, чем ответ Майка, который я поставил +1, поскольку мне интересно найти имя каталога Program Files]
Environment.Is64BitOperatingSystem и Environment.Is64BitProcess вводятся в .NET 4. Для .NET 2 вам нужно будет попробовать некоторые другие ответы.
Вы должны принять ответ или объяснить, что вы сделали, и принять это.