Как моя программа может определить, работает ли она в 32-битной или 64-битной Windows? - PullRequest
5 голосов
/ 19 мая 2010

Вот мой вопрос. Как лучше всего определить, на какой битовой архитектуре работает ваше приложение?

Что я хочу сделать: на 64-битном сервере я хочу, чтобы мое приложение считывало 64-битные источники данных (хранящиеся в reg key Software \ Wow6432Node \ ODBC \ ODBC.INI \ ODBC Data Sources) и, если оно 32-битное, я хочу для чтения 32-разрядных источников данных (например, чтение из источников данных Software \ ODBC \ ODBC.INI \ ODBC).

Возможно, я упускаю суть, но мне не важно, в каком режиме работает мое приложение. Я просто хочу знать, является ли ОС 32- или 64-разрядной.

[System.Environment.OSVersion.Platform, кажется, не режет это для меня. Возвращает Win32NT на моем локальном компьютере xp и на 64-битном сервере win2k8 (даже когда все мои проекты настроены на «любой процессор»)]

Ответы [ 5 ]

4 голосов
/ 19 мая 2010

Простое, безопасное, независимое от фреймворка решение без перехода в реестр:

Console.WriteLine(
    "Is 64-bit? {0}",
    (
        System.Runtime.InteropServices.Marshal.SizeOf(typeof(IntPtr)) == sizeof(Int64)
            ? "Yes" 
            : "No"
    )
);
4 голосов
/ 19 мая 2010

Попробуйте свойство Environment.Is64BitOperatingSystem. Это новая версия, добавленная в .Net 4.0 специально для проверки типа операционной системы.

4 голосов
/ 19 мая 2010

Тебе даже не стоит об этом беспокоиться, как обычно. Система автоматически перенаправляет запросы реестра на Software\Wow6432Node при запуске 32-разрядного приложения на 64-разрядной платформе.

2 голосов
/ 19 мая 2010

Вы не должны читать Wow6432Node напрямую. Используйте RegistryView , чтобы указать 32-разрядное представление при запуске в качестве 64-разрядного приложения.

1 голос
/ 19 мая 2010
...