C# WinForms应用生成Windows照片查看器影响原始应用中的字体

C# WinForms应用生成Windows照片查看器影响原始应用中的字体,c#,winforms,fonts,highdpi,photoviewer,C#,Winforms,Fonts,Highdpi,Photoviewer,我们有一个在Windows7上运行的WinForms桌面应用程序,桌面设置为150%字体大小。我们使用Process.Start()启动查看器来显示存储在数据库中的文档。查看照片时,将启动Windows照片查看器。发生这种情况时,应用程序中的许多字体都会更改。菜单字体特别受影响。我假设这与WinForms库中的高DPI处理有关。然而,我很惊讶启动Windows Photo Viewer会对桌面造成影响应用程序的更改。125%或175%的设置不具有此效果 有没有什么方法可以使我们的应用程序在运行时

我们有一个在Windows7上运行的WinForms桌面应用程序,桌面设置为150%字体大小。我们使用Process.Start()启动查看器来显示存储在数据库中的文档。查看照片时,将启动Windows照片查看器。发生这种情况时,应用程序中的许多字体都会更改。菜单字体特别受影响。我假设这与WinForms库中的高DPI处理有关。然而,我很惊讶启动Windows Photo Viewer会对桌面造成影响应用程序的更改。125%或175%的设置不具有此效果


有没有什么方法可以使我们的应用程序在运行时免受这种影响?

像您一样,我们的应用程序将文件存储在数据库中。当用户需要查看文件时,程序将从数据库检索该文件并将其保存到本地驱动器。保存后,它将使用ShellExecute调用打开文件

当Windows 7中的字体设置为大于100%时,jpgs设置为在Windows照片查看器中打开时,我也遇到了同样的问题。在我的测试中,这只影响调用应用程序。从Windows资源管理器打开相同的jpg或启动|运行时,应用程序不受影响


基于此,在花了很多时间寻找解决方案后,我最终决定使用这个“黑客”来解决这个问题。我创建了一个单独的EXE,它只打开作为参数传入的文件。然后,我将我的主应用程序从打开JPG更改为以JPG文件位置为参数启动这个新的EXE。现在,新的EXE是“原始应用程序”,而不是我的主应用程序,因此我的主应用程序不会受到影响。

对于一个复杂而混乱的错误,这听起来是一个很好的简单解决方法。