Как проверить, работает ли на клиентском компьютере 32-разрядная или 64-разрядная ОС - PullRequest
2 голосов
/ 11 мая 2011

Как проверить, работает ли клиентский компьютер с 32-битной или 64-битной ОС в ASP.NET 3.5?

Ответы [ 5 ]

4 голосов
/ 11 мая 2011

Нет способа надежно определить, работает ли клиент на 64-битной операционной системе или 32-битной. Что, если клиент вообще не является полноценным компьютером?

Все, что вы можете сделать без запуска какого-либо специфичного для платформы кода на клиенте, - это доверять строке агента пользователя, передаваемой браузером. Некоторые браузеры, такие как Internet Explorer, фактически отправляют эту подсказку в строке агента пользователя.

Например, 64-разрядный IE отправит «Win64; x64» как часть строки пользовательского агента, а 32-разрядный IE, работающий в 64-разрядном выпуске Windows, отправит «WOW64» как часть этого.

2 голосов
/ 11 мая 2011

Это должно работать:

System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE")

Существуют другие собственные Win32 API, которые могут определять то же самое:

http://msdn.microsoft.com/en-us/library/aa394373%28VS.85%29.aspx

1 голос
/ 26 сентября 2012

Оформить заказ Environment.Is64BitOperatingSystem

Он вернет true, если операционная система 64-битная; в противном случае - ложь.

0 голосов
/ 11 мая 2011

Вы можете сначала попытаться отобразить серверные переменные для ASP.NET, например:

       if (!IsPostBack) {
            int loop1, loop2;
            NameValueCollection coll;

            // Load ServerVariable collection into NameValueCollection object.
            coll = Request.ServerVariables;
            // Get names of all keys into a string array. 
            String[] arr1 = coll.AllKeys;
            for (loop1 = 0; loop1 < arr1.Length; loop1++) {
                Response.Write("Key: " + arr1[loop1] + "<br>");
                String[] arr2 = coll.GetValues(arr1[loop1]);
                for (loop2 = 0; loop2 < arr2.Length; loop2++) {
                    Response.Write("Value " + loop2 + ": " + Server.HtmlEncode(arr2[loop2]) + "<br>");
                }
            }
        }

После этого вы можете проверить значение HTTP_USER_AGENT:

Ключ: значение HTTP_USER_AGENT0: Mozilla / 4.0 (совместимый; MSIE 8.0; Windows NT 6.1; WOW64 ; Trident / 4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729;Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2; Zune 4.7; AskTbFXTV5 / 5.11.3.15590)

Согласно этой ссылке , это означает:

(64-разрядная версия Windows-On-Windows) 32-разрядное приложение работает на 64-разрядном процессоре

0 голосов
/ 11 мая 2011

Вы можете посмотреть на пользовательский агент, чтобы увидеть, на какой ОС / архитектуре работает клиент, но пользовательский агент может быть изменен, поэтому не является надежным источником на 100%.

Посмотрите на http://whatsmyuseragent.com/, чтобы увидеть, что у вас, мое показывает WOW64:

Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 534.24 (KHTML, как Gecko) Chrome / 11.0.696.65 Safari / 534.24

Кроме этого вам может потребоваться запустить какой-нибудь скрипт на клиенте, чтобы определить, что это такое - ища среду "PROCESSOR_ARCHITECTURE", вы снова полагаетесь на наличие этой переменной; в потенциально изолированной среде браузер (или приложение) может не захотеть, чтобы вы видели много переменных среды.

В чем причина определения 32/64-битной архитектуры ОС?

...