Сертификация магазина Microsoft не проходит из-за осведомленности о DPI - PullRequest
3 голосов
/ 06 марта 2020

Я хотел опубликовать sh новую версию моего приложения (WPF, преобразованный в UWP с Desktop Bridge) в Microsoft Store, но он не прошел сертификацию со следующим предупреждением:

  • Файл **. Exe не имеет ни PerMonitorV2, проявленного в манифесте, ни вызовов API DPI Awareness для ex: user32! SetProcessDpiAwarenessContext или user32! SetThreadDpiAwarenessContext.
  • Приложение *** не поддерживает DPI.

У меня есть следующие вопросы:

  1. Прежде всего, я опубликовал первую версию своего приложения в конце прошлого года, и не было проблемы с осведомленностью DPI. Итак, это новый тест?

  2. Поскольку это всего лишь предупреждение и все остальные тесты пройдены, это может быть причиной неудачного процесса сертификации?

  3. Итак, я попытался сделать так, чтобы мое приложение распознавало DPI ...

На основе этого описания, которое я вызвал в SetProcessDpiAwarenessContext функцию и проверил со всеми четыре значения. С флагами unaware и System aware мое приложение выглядело размытым, а с флагами Per Monitor выглядело хорошо, но когда я запрашивал размер экрана, оно возвращало исходную ширину и высоту, не считая масштаба (у меня 150% масштаб), поэтому мой windows был расположен не в той части экрана. Вопрос в том, что, если нужно установить только эти 4 флага и ни один из них не работает по умолчанию (без каких-либо настроек), то какова настройка по умолчанию?

Хорошо, здесь перечислил 5 флагов, но ни один из них не работает так, как будто ничего не установлено.

Большое спасибо!

1 Ответ

0 голосов
/ 09 марта 2020

Наконец-то я нашел решение этой проблемы: вместо того, чтобы пытаться информировать DPI моего приложения из кода, вызывая соответствующие методы из системной DLL, мне пришлось добавить app.manifest файл в WPF проект. Когда я пытался таким образом, проблема, связанная с неверным размером экрана, исчезла.

Здесь - пример того, что должно содержать этот файл манифеста. Очень важно то, что Магазин не принял настройку PerMonitor, как в примере выше. Его нужно изменить на PerMonitorV2 (кстати, об этом они и просили в сообщении об ошибке).

Добавив эти настройки в проект, он прошел сертификацию на магазин. И, что удивительно, да, именно это предупреждение стало причиной неудачной сертификации.

Еще одна вещь, после добавления файла манифеста, она должна быть подключена к проекту. Вы можете сделать это, добавив следующий код в файл <your_project_name>.csproj (пример здесь ):

<PropertyGroup>
  <ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>

Чтобы увидеть всю картинку, я также добавил второй шаг из этот ответ.

Наслаждайтесь!

...