c# - 由于 DPI 意识,Microsoft 商店认证失败
问题描述
我曾想将我的应用程序的新版本(使用桌面桥转换为 UWP 的 WPF)发布到 Microsoft Store,但它未能通过认证并出现以下警告:
- 文件 **.exe 既没有在清单中显示 PerMonitorV2,也没有调用 DPI 感知 API,例如:user32!SetProcessDpiAwarenessContext 或 user32!SetThreadDpiAwarenessContext。
- 该应用程序 *** 不支持 DPI。
我有以下问题:
首先,我在去年年底发布了我的应用程序的第一个版本,并且 DPI 意识没有问题。所以这是一个新的测试?
由于这只是一个警告并且所有其他测试都已通过,这可能是认证过程失败的原因吗?
所以我试图让我的应用程序 DPI 感知......
根据这个描述,我调用了SetProcessDpiAwarenessContext
函数并检查了所有四个值。使用unaware
和System aware
标记我的应用程序看起来很模糊,并且Per Monitor
标记看起来不错,但是当我请求屏幕尺寸时,它返回原始宽度和高度,不计算比例(我有 150% 的比例),所以我的窗口定位到屏幕的错误部分。问题是,如果只有这 4 个标志要设置并且它们都不是默认设置(没有设置任何东西),那么默认设置是什么?
好的,这里列出了 5 个标志,但它们都没有工作,就好像什么都没有设置一样。
非常感谢!
解决方案
最后我找到了问题的解决方案:我没有尝试通过从系统 DLL 调用相应的方法来让我的应用程序 DPI 从代码中感知,而是必须向项目中添加一个app.manifest
文件WPF
。当我尝试这种方式时,与无效屏幕尺寸相关的问题消失了。
这是一个应该包含此清单文件的示例。一个非常重要的事情是商店没有接受PerMonitor
上面示例中的设置。它必须更改为PerMonitorV2
(顺便说一句,这也是他们在错误消息中所要求的)。
通过将此设置添加到项目中,它通过了商店的认证。令人惊讶的是,这个警告是认证失败的原因。
添加清单文件后还有一件事,它应该连接到项目。您可以通过将以下代码添加到<your_project_name>.csproj
文件中来做到这一点(此处为示例):
<PropertyGroup>
<ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>
要查看全貌,我还添加了此答案的第二步。
享受!
推荐阅读
- reactjs - 如何在syncfusion的甘特图中动态更新任务(只有一个任务)
- python-3.x - 为什么除了输出之外我没有得到任何东西?
- graphql - 如何在 Hasura GraphQL 中插入嵌套表值?
- access-control - 是否可以更改 wia 访问权限 (4102)
- autodesk-forge - Autodesk 转换为 svf 失败
- php - 使用 .htaccess 从特定位置加载索引文件且 url 不存在
- c - 链接 C 库时出错:无法识别 libsodium.la 文件
- c# - 我可以将 geojson 文件转换为光栅化图块以供传单使用吗?
- python - 使用 Pycodestyle 正确使用 lambda 函数
- java - 如何验证具有不同属性要求不同方法调用的弹簧模型对象?