C# 由于DPI意识,Microsoft应用商店认证失败

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意识没有问题。这是一个新

我本想向Microsoft应用商店发布我的应用程序的新版本(WPF转换为带桌面网桥的UWP),但未通过认证,并发出以下警告:

  • 文件**.exe既没有在清单中显示PerMonitorV2,也没有调用DPI感知 用于ex:user32的API!SetProcessDpiAwarenessContext或user32!SetThreadDpiAwarenessContext
  • 应用程序***不支持DPI
我有以下问题:

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

  • 由于这只是一个警告,并且所有其他测试都通过了,这可能就是认证过程失败的原因

  • 所以我试着让我的应用程序知道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>