Как определить Платформу ОС с WMI?

Это выглядит корректным мне. Если бы я должен был изменить что-нибудь, то я прекратил бы использовать Collections.synchronizedMap () и синхронизировал бы все тот же путь, только для создания его более ясным.

кроме того, я заменил бы

  if (synchronizedMap.containsKey(key)) {
    synchronizedMap.get(key).add(value);
  }
  else {
    List<String> valuesList = new ArrayList<String>();
    valuesList.add(value);
    synchronizedMap.put(key, valuesList);
  }

с

List<String> valuesList = synchronziedMap.get(key);
if (valuesList == null)
{
  valuesList = new ArrayList<String>();
  synchronziedMap.put(key, valuesList);
}
valuesList.add(value);
11
задан Chathura Buddhika 29 August 2017 в 17:13
поделиться

4 ответа

После некоторого времени поиска и тестирования я нашел «исправление / ответ», хотя это не совсем то, на что я надеялся. Выполнение запроса через реестр, по-видимому, единообразно для всех версий, которые у меня есть в моей лаборатории для Win2k3 и Win2k8. Вот откуда я беру информацию:

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment

KEY: PROCESSOR_ARCHITECTURE

Отображает x86 или AMD64. Это не идеально, но, по крайней мере, он каждый раз дает мне правильный ответ.

Тем не менее, если кто-то знает согласованный ключ «Класс» или реестра, который будет выводить 32/64, 32-бит / 64-бит или X86 / X64, я был бы очень признателен за информацию.

2
ответ дан 3 December 2019 в 04:52
поделиться

(Не тестировалось), но возможно:

CIM_Processor Class (AddressWidth)

0
ответ дан 3 December 2019 в 04:52
поделиться

Простой запрос WMI, который вы использовали, действительно возвращает результат для каждого физического процессора в компьютере. Он вернет только один результат, если у вас однопроцессорный, многоядерный процессор. Мы можем с уверенностью предположить, что в компьютере есть как минимум один процессор, поэтому мы просто используем информацию из CPU0.

Чтобы выбрать только 64-битные операционные системы...

select * from Win32_Processor where DeviceID="CPU0" and AddressWidth="64"

Чтобы выбрать только 32-битные операционные системы...

select * from Win32_Processor where DeviceID="CPU0" and AddressWidth="32"
5
ответ дан 3 December 2019 в 04:52
поделиться

В VBS:

On Error Resume Next

Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20

Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", _
                                          wbemFlagReturnImmediately + wbemFlagForwardOnly)
For Each objItem In colItems
   WScript.Echo "AddressWidth: " & objItem.AddressWidth
Next
0
ответ дан 3 December 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: