我们有一个C#WPF项目(.NET 4.0,Visual Studio 2010)。它已在Windows XP和Windows 7上进行了测试,似乎运行良好,但现在我收到了两个客户的报告(两者都位于西班牙由于某种原因)无法启动软件。
查看日志文件,我看到他们得到“图像格式无法识别”异常(引起:HRESULT异常:0x88982F07)。
我已经搜索了错误,我发现这似乎是WPF无法在Windows XP上加载Vista PNG图标。但是这些报告已经有几年了,当然微软现在已经解决了这个问题(?),在我的情况下,它在大多数XP安装上都可以正常工作。我真的不想在最近的Windows上限制图标外观。
我们的应用程序最常见的用途是笔记本电脑,其中一位用户报告称,当他将笔记本电脑连接到外接显示器时问题得到了解决。当我让另一个人测试同样的东西时,他也有同样的结果。
所以我的问题是:你知道微软是否解决了这个问题?你知道为什么它只发生在某些Windows XP实例上以及它与显示器的关系吗?最重要的是,你知道如何在不改变图标的情况下使我们的应用程序更加健壮吗?
答案 0 :(得分:2)
我今天遇到了同样的错误,只是在我的开发机器上。 WPF的实现似乎仍然存在问题。
如果我理解这一点(article),那么它可以在任何地方读取ICO文件。在我的例子中,它是在XAML中为主应用程序窗口设置一个图标时:
<Window x:Class="MyApp.MainWindow" Icon="Dashboard.ico" >
以上代码突然失败,但使用PNG文件解决了问题:
<Window x:Class="MyApp.MainWindow" Icon="Dashboard.png" >
答案 1 :(得分:0)
今天早上我对这个问题有点乐趣。事实证明,错误仅发生在颜色设置为16位的XP机器上,当我将其更改为32位时,问题神奇地消失了。
这适用于XP(包括嵌入式)SP3。
答案 2 :(得分:0)
这个问题让我脱掉了很长一段时间,我花了很长时间才弄清楚发生了什么事情,所以我会分享我的结论,因为它可能会帮助别人(甚至可能是我自己)在将来):
此问题主要出现在Windows XP和/或通过远程桌面连接时(特别是在Windows服务器上)。但它有点随意,无法有目的地复制
这些链接提供了一个很好的解释以及解决方案/解决方法: http://code.logos.com/blog/2008/08/image_format_error_when_loading_from_a_stream.html https://github.com/LogosBible/Logos.Utility/blob/master/src/Logos.Utility/IO/RebasedStream.cs
直接使用png文件会有效,但它有其局限性(例如,我使用.ico文件,以便根据显示的图标的大小有多个图像,而.png文件不能替换.ico文件用于此目的)
最好的答案 - 以及我最终做的事情 - 是约阿希姆在他对OP问题的评论中所说的:
https://social.msdn.microsoft.com/Forums/vstudio/en-US/9e723d51-0e26-4609-8fe1-5e0edcf7385b/setting-windowicon-to-vista-256x256-png-icon-causes-a-fileformatexception?forum=wpf 似乎表明,如果你不压缩图标,它将自行解决。 - 约阿希姆·伊萨克森 2012年1月23日12:44
所以我抬头看了icoFx(用于我的图标编辑),果然:
我只是取消选中此项并再次保存我的.ico(大小从30Kb升至286Kb!)并且瞧!
问题解决了