C# 由于DPI意识,Microsoft应用商店认证失败
我本想向Microsoft应用商店发布我的应用程序的新版本(WPF转换为带桌面网桥的UWP),但未通过认证,并发出以下警告:C# 由于DPI意识,Microsoft应用商店认证失败,c#,wpf,uwp,publishing,desktop-bridge,C#,Wpf,Uwp,Publishing,Desktop Bridge,我本想向Microsoft应用商店发布我的应用程序的新版本(WPF转换为带桌面网桥的UWP),但未通过认证,并发出以下警告: 文件**.exe既没有在清单中显示PerMonitorV2,也没有调用DPI感知 用于ex:user32的API!SetProcessDpiAwarenessContext或user32!SetThreadDpiAwarenessContext 应用程序***不支持DPI 我有以下问题: 首先,我在去年年底发布了我的应用程序的第一个版本,DPI意识没有问题。这是一个新
- 文件**.exe既没有在清单中显示PerMonitorV2,也没有调用DPI感知 用于ex:user32的API!SetProcessDpiAwarenessContext或user32!SetThreadDpiAwarenessContext
- 应用程序***不支持DPI
SetProcessDpiAwarenessContext
函数,并用所有值进行了检查。使用unaware
和System aware
标志,我的应用程序看起来很模糊,使用每个监视器的标志看起来很好,但当我请求屏幕大小时,它返回了原始的宽度和高度,没有计算比例(我有150%的比例),因此我的窗口被定位到屏幕的错误部分。问题是,如果只有这4个标志需要设置,但没有一个可用作默认标志(不设置任何内容),那么默认设置是什么
好的,列出了5个标志,但是没有一个在工作,好像什么都没有设置
非常感谢 我终于找到了解决问题的办法:
我没有试图通过从系统DLL调用相应的方法来从代码中识别我的应用程序DPI,而是将app.manifest
文件添加到WPF
项目中。当我尝试这种方法时,与无效屏幕大小相关的问题消失了
是应包含此清单文件的示例。非常重要的一点是,商店没有像上面示例中那样接受PerMonitor
设置。必须将其更改为PerMonitorV2
(顺便说一下,这也是他们在错误消息中询问的问题)
通过将此设置添加到项目,它通过了商店的认证。令人惊讶的是,这一警告是认证失败的原因
在添加清单文件之后,还有一件事,它应该连接到项目。您可以通过将以下代码添加到.csproj
文件(示例)来完成此操作:
回答
享受吧 WPF应用程序调用SetProcessDPIAware(),但这还不足以让商店满意。为了让您自己的监视器知道您必须这样做,您必须处理窗口移动到另一个监视器时收到的通知。它建议使用SetProcessDpiAwareness()而不是使用清单,原因不太清楚,但如果应用程序在另一个监视器上启动,则应该使用它。您必须处理WM_DPICHANGED。警告不应阻止摄入;你试过联系商店支持吗?如果你对UWP而不是WPF有问题,也可以这样做。它将修复此警告。
<PropertyGroup>
<ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>