【问题标题】:Microsoft store certification fails due to DPI awareness由于 DPI 意识,Microsoft 商店认证失败
【发布时间】:2020-06-19 04:03:25
【问题描述】:

我曾想将我的应用程序的新版本(WPF 转换为带有桌面桥的 UWP)发布到 Microsoft Store,但它未能通过认证并出现以下警告:

  • 文件 **.exe 既没有在清单中显示 PerMonitorV2,也没有调用 DPI Awareness 例如:user32!SetProcessDpiAwarenessContext 或 user32!SetThreadDpiAwarenessContext 的 API。
  • 应用 *** 不支持 DPI。

我有以下问题:

  1. 首先,我在去年年底发布了我的应用程序的第一个版本,并且 DPI 意识没有问题。所以这是一个新的测试?

  2. 由于这只是一个警告,所有其他测试都已通过,这可能是认证过程失败的原因吗?

  3. 所以我尝试让我的应用了解 DPI...

根据this 描述,我调用了SetProcessDpiAwarenessContext 函数并检查了所有four 值。使用unawareSystem aware 标志我的应用程序看起来很模糊,使用Per Monitor 标志看起来不错,但是当我请求屏幕尺寸时,它返回原始宽度和高度,不计算比例(我有150%比例),所以我的窗口被定位到屏幕的错误部分。问题是,如果只有这 4 个标志要设置并且它们都不是默认设置(不设置任何东西),那么默认设置是什么?

好的,here 列出了 5 个标志,但它们都没有像没有设置任何东西一样工作。

非常感谢!

【问题讨论】:

  • 一个 WPF 应用程序调用 SetProcessDPIAware(),但这还不足以让商店满意。要让自己知道监视器,你必须做more work,你必须处理当窗口移动到另一个监视器时收到的通知。它建议使用 SetProcessDpiAwareness() 而不是使用清单,如果应用程序在另一台监视器上启动,您会遇到问题的原因不是很清楚,但可以预料。你必须处理 WM_DPICHANGED。
  • 警告不应阻止摄取;您是否尝试联系商店支持?

标签: c# wpf uwp publishing desktop-bridge


【解决方案1】:

最后我找到了解决问题的方法: 我没有尝试通过从系统 DLL 调用相应方法来让我的应用程序 DPI 从代码中识别,而是必须app.manifest 文件 添加到WPF 项目中。当我尝试这种方式时,与无效屏幕尺寸相关的问题消失了。

Here 是应包含此清单文件的示例。一个非常重要的事情是商店没有像上面的示例那样接受PerMonitor 设置。必须将其更改为 PerMonitorV2(顺便说一句,这也是他们在错误消息中要求的内容)。

通过将此设置添加到项目中,它通过了商店的认证。令人惊讶的是,这个警告就是认证失败的原因。

添加清单文件后还有一件事,它应该连接到项目。您可以通过将以下代码添加到<your_project_name>.csproj 文件(例如here)来实现:

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

为了看全图,我还添加了this答案的第二步。

享受吧!

【讨论】:

  • 如果您对 UWP 而非 WPF 有问题,请执行相同的操作。它将修复此警告。
猜你喜欢
  • 1970-01-01
  • 2023-03-06
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 2019-07-31
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多