gpt4 book ai didi

c# - DPI 意识 - 在一个版本中没有意识到,在另一个版本中有系统意识

转载 作者:可可西里 更新时间:2023-11-01 09:08:43 29 4
gpt4 key购买 nike

<分区>

所以我们遇到了这个非常奇怪的问题。我们的应用程序是 C#/WinForms 应用程序。在我们的 6.0 版本中,我们的应用程序不支持 DPI。在我们的 6.1 版本中,它突然变得支持 DPI。
在 6.0 版本中,如果您以高 DPI 运行它,它会使用 Windows 位图缩放,这很好,因为这不会影响屏幕布局。在 6.1 版本中,由于某种原因它变得可识别 DPI,因此用户界面变得困惑。
我们现在无法解决此问题。我们有数百个屏幕,因此让它们在 DPI 感知模式下正常工作需要花费大量时间。

我们已经使用 SysInternals Process Explorer 确认了这一点。在我们的 6.0 版本中,它显示为 Unaware,但在我们的 6.1 版本中,它最初显示为 Unaware,但随后变为 System Aware
后者发生在代码从 EXE 进入包含我们所有用户界面代码的程序集 DLL 时(我们的 EXE 基本上是一个非常薄的外壳;它真正做的只是在我们的表示层程序集上调用 Controller 类。)

我们确认了以下内容:

  • 这两个版本都是使用 VSS 2017 在 Release模式下构建的。
  • 两个版本都针对相同的 .NET Framework (4.5)
  • 两个版本使用相同的 DevExpress 版本。
  • 两个版本都有相同的应用程序 list ,启用 DPI 感知设置。
  • 这两个版本都没有调用任何与 DPI 相关的 Windows API。
  • 使用 Sys Internals 和一些消息框,我们确定了 6.1 版本在什么时候开始意识到(Presentation 程序集的入口点)以及在那个时候加载了哪些 DLL(我们的、DevExpress、其他依赖项),然后我们构建了一个小的引用相同 DLL 的虚拟应用程序,并确认这些已加载。该虚拟应用不会感知 DPI。
  • 我们比较了两个版本之间的主要 csproj 文件,没有明显差异。
    • 两个版本均未引用 WPF 中的任何内容。

我们不明白为什么我们的 6.1 版本突然变得支持 DPI。我们不知道还有什么要看,我们需要一个修复程序,将此版本恢复到 DPI 无意识模式。它阻碍了我们的释放。非常感谢任何指点。我们愿意在这一点上尝试任何事情。

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com