2016-08-17 10 views
0

окружающей среды:Manifest для DLL - Для проверки Windows 10 совместимости (Используйте версия вспомогательные API),

Visual Studio 2015/Visual C++

ОС: Windows 10 TH2 10586/сопряженный Windows SDK


Поскольку GetVersionEx устарел в Windows 8 и более поздних версиях, я хотел использовать API-интерфейсы вспомогательной версии (IsWindows10OrGreater), чтобы обнаружить ОС в моей DLL, чтобы решить поток. Однако, согласно документации MSDN, мне нужно будет иметь манифест (с разделом совместимости для поддерживаемых версий ОС), без которого этот API (IsWindows10OrGreater) вернет false, даже если он запущен в Windows 10.

Я добавил манифест с необходимыми разделами совместимости, но я не мог заставить его работать. Он всегда возвращает false. (Я определил идентификатор манифеста как 2 в моем ресурсе.h, так как это DLL)

Чтобы перекрестно проверить, я внедрил образец автономного приложения с тем же манифестом, который отлично работает для этого API-интерфейса вспомогательной версии.

Мне нужна ваша помощь, чтобы понять, чего мне не хватает здесь, в DLL? К сожалению, ни одна из обсуждений, доступных в Интернете, не говорит о том, что DLL демонстрирует совместимость.

Спасибо,

ответ

0

Ответ приходит немного поздно, но у меня была аналогичная проблема, см мой вопрос here.

Проблема в том, что раздел совместимости манифеста игнорируется при применении к DLL, он работает только при применении к EXE.

Итак, если вы не контролируете EXE, который будет использовать вашу DLL, и не может быть уверен, что он имеет правильный манифест, способ обойти его - получить ProductVersion из файла kernel32.dll. Это точно соответствует версии Windows и кажется довольно надежным (рекомендуется также на MSDN).

 Смежные вопросы

  • Нет связанных вопросов^_^