Пишу приложение в fasm и у меня проблема с определением Windows версии 8.1 и выше. Функции GetVersionEx
и Version Helper
дают мне Windows 8. Как говорит MSDN, я должен настроить свое приложение, изменив файл манифеста в Visual Studio, но я не использую VS, так что мне делать?
Функция GetVersionEx для Windows 8.1 и выше (fasm)
Ответы (2)
Любая среда программирования, которая позволяет вам связывать ресурсы с скомпилированным исполняемым файлом, может использоваться для создания ресурса манифеста. Все, что вам нужно сделать, это написать подходящий файл .manifest
для вашего приложения, который содержит нужные значения XML, а затем связать содержимое этого файла непосредственно с ресурсами вашего приложения, убедившись, что тип ресурса равен 24, а идентификатор ресурса равен 1, 2 или 3 (см. эту страницу для получения подробной информации о том, когда какой идентификатор использовать). Для этого не обязательно использовать VisualStudio.
Если по какой-то причине вы не можете напрямую связать манифест с ресурсами вашего приложения, вы можете в качестве альтернативы сохранить XML в файл с именем <myappname>.exe.manifest
(где <myappname>
— фактическое имя вашего EXE-файла) и поместить его в ту же папку, что и ваше приложение. . Это не предпочтительный подход к проявлению, но он работает.
При этом существуют альтернативные API, которые вы можете использовать вместо помощников на основе GetVersion/Ex()
или VerifyVersionInfo()
, чтобы получить правильную версию ОС, вообще не занимаясь манифестацией. А именно, RtlGetVersion()
, NetServerGetInfo()
и NetWkstaGetInfo()
(и все они были проверены на работоспособность в Windows 8.1 и 10).
Файл манифеста представляет собой XML-файл, внедренный как ресурс Win32. Это также может быть внешний файл с именем your.exe.manifest
. Поищите примеры в Интернете для образцов содержания.
resdata manifest
инструкция макроса. - person IInspectable   schedule 21.12.2015GetVersionEx()
изменилось. Вы должны манифестировать свой исполняемый файл и указать совместимость с конкретными версиями ОС в этом манифесте, чтобыGetVersionEx()
правильно сообщал эти номера версий. Это изменение в поведении хорошо задокументировано в MSDN. - person Remy Lebeau   schedule 22.12.2015