Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Что за ... с VerQueryValue в Win 10?  (Прочитано 4163 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« : 31-07-2015 15:18 » 

Задача простая: определить текущую версию винды.

Забиыв на устаревшие уже неработающие методы типа GetVersionEx и VerifyVersionInfo и внемля советам Мастера в частности
Цитата
To obtain the full version number for the operating system, call the GetFileVersionInfo function on one of the system DLLs, such as Kernel32.dll, then call VerQueryValue to obtain the \\StringFileInfo\\<lang><codepage>\\ProductVersion subblock of the file version information.
получил нечто... непотребное.

На 7, 8, 8.1 всё работает нормально

Код: (C++)
        TRACE1("dwFileVersionMS = %08X\r\n", pFileInfo->dwFileVersionMS);
        TRACE1("dwFileVersionLS = %08X\r\n", pFileInfo->dwFileVersionLS);

        TRACE1("dwProductVersionMS = %08X\r\n", pFileInfo->dwProductVersionMS);
        TRACE1("dwProductVersionLS = %08X\r\n", pFileInfo->dwProductVersionLS);

выдаёт (7 64бит)

Код:
dwFileVersionMS = 00060001
dwFileVersionLS = 1DB149B5
dwProductVersionMS = 00060001
dwProductVersionLS = 1DB149B5

а вот на десятке

Код:
dwFileVersionMS = 00060002
dwFileVersionLS = 28004000
dwProductVersionMS = 000A0000
dwProductVersionLS = 28004000

Копирую kernel32.dll на свой комп, проверяю

Код:
dwFileVersionMS = 000A0000
dwFileVersionLS = 28004000
dwProductVersionMS = 000A0000
dwProductVersionLS = 28004000

Всё нормально...  А черт его знает...

Т.е. если я использую на десятке dwProductVersionMS структуры VS_FIXEDFILEINFO, то работает -> 10.0.10240.16384, а если dwFileVersionMS, то получаю вместо десятки восьмёрку (6.2.10240.16384)

При этом в свойствах файла на десятке оба значения показаны правильно

Кто сталкивался и как лечил.

ps в инете нашёл на эту тему проблемы у PHP-шников и у QT, но они похоже использовали ну совсем уже старую GetVersionEx
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 31-07-2015 19:05 » 

а причем здесь php - что вернуло, то и есть
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #2 : 31-07-2015 21:35 » 

Слав, дело в том, что PHP на винде никуда не деться от API. И если использовать старые УЖЕ неработающие ф-ции, то и будет возвращаться не то, что надо.

Цитата
The phpinfo() output on Windows 8.1 and Windows Server 2012 R2 reports the OS as Windows 8 and Windows Server 2012.
This is due to the deprecation of GetVersionEx (which we are using) on these platforms

По идее, они должны были заметить эту проблему ещё на 8.1, уже на ней GetVersionEx не работала.

Если тебе интересно про эту проблему в PHP, можешь почитать здесь (цитата была оттуда)
« Последнее редактирование: 31-07-2015 21:38 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 01-08-2015 10:59 » 

Я это понимаю.
Но, т.к. я мало знаком с необходимостью версии OC в php - отсюда и вопрос
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 03-08-2015 07:50 » 

Нууу по php вопросы это не ко мне.

Сделал дамп памяти по указателю pFileInfo на семёрке, всё нормально. Данные правильные. Получается, что на десятке не работает GetFileVersionInfo   Не понял А черт его знает...
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines