Могу ли я полагаться на OSVERSIONINFO.szCSDVersion или Environment.OSVersion.ServicePack, чтобы он всегда имел форму "Пакет обновления X"?
Название в основном говорит обо всем. Мне нужно определить номер пакета обновления Windows (в числовой форме), а Environment.OSVersion.ServicePack (который в основном просто возвращает OSVERSIONINFO.szCSDVersion) просто возвращает строку.
Во всех моих тестах эта строка оказалась в виде ""
(без пакета обновления) или "Service Pack X"
, с X
быть числом. Так что алгоритм для анализа этого должен быть довольно простым.
Мой вопрос: могу ли я полагаться на эту строку, чтобы всегда иметь этот формат?
(Одна часть меня говорит "нет", потому что это не задокументировано. Другая часть говорит "да", потому что, конечно, большая часть существующего кода сломается, если MS решит вернуться, скажем, "SP 2 (x86)"
для Windows 7 SP2. Таким образом, они не будут этого делать. У кого-нибудь есть больше информации по этому поводу?)
2 ответа
Нет, вы не можете, некоторые версии используют переведенные строки! Если вы посмотрите на строки из изображения в этой ссылке, вы увидите, что вам может не хватить только первого номера, найденного в строке.
OSVERSIONINFOEX был добавлен в NT4 SP6, если вы вызываете GetVersionEx, вам нужно иметь дело только со строкой в Win9x и
Вы должны использовать BuildLabEx
вместо. У этого есть определенный формат, который проводился с ранних сборок Windows. Не уверен, что вы можете найти его в WMI (вы должны быть в состоянии), но это в реестре:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\BuildLabEx
Пример:
7601.17640.amd64fre.win7sp1_gdr.110632-1508
Если это заставляет вас чувствовать себя более комфортно, вы можете положиться на CSDVersion
сопоставление с определенным регулярным выражением для простоты и возврат на BuildLabEx
если это не совпадает.