Как я могу определить, использую ли я .NET x64 или x86?

Я хотел бы предложить своим пользователям правильные ссылки на обновленную версию моей программы в зависимости от того, на какой платформе они работают, поэтому мне нужно знать, работаю ли я в настоящее время на ОС x86 или на ОС x64.

Лучшее, что я нашел, - это использование Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE"), но я думаю, что для этого есть какое-то встроенное средство?

Вы должны принять ответ или объяснить, что вы сделали, и принять это.

Ruben Bartelink 10.12.2009 17:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
1
2 156
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Проверьте размер IntPtr с помощью Marshal.SizeOf. 32 бита = 4 байта, 64 бита = 8 байтов.

Обновлено: я не уверен, что это то, что вы ищете, после повторного прочтения вопроса.

Это будет различать 32-битную и 64-битную платформу, хотя 64-битная платформа может быть, скажем, Itanium, а не x64. (Вряд ли, я знаю, но возможно.)

millenomi 18.09.2008 12:22

Вам не нужно использовать Marshal.SizeOf, вы можете просто использовать IntPtr.Size

Wilka 17.11.2008 18:32

@millenomi: Или даже 64-битный ARM.

Zan Lynx 04.04.2012 03:34

Проверяйте только IntPtr.Size. У вас должна быть целевая платформа AnyCPU.

отсюда

(Я понимаю, что это другое, но лучше всего указать на это в комментарии к другому ответу. Но я также понимаю, что, вероятно, в тот день даже не было комментариев и / или у вас не было достаточно репутации, чтобы сделать их .. .)

Ruben Bartelink 10.12.2009 17:08

Позвоните в 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 вам нужно будет попробовать некоторые другие ответы.

Другие вопросы по теме