WPF窗口在启动时崩溃,或者它启动但挂起并且不呈现内容

时间:2012-01-30 16:10:18

标签: wpf

我遇到了一些令人讨厌的问题,WPF应用程序在某些客户端计算机上崩溃,但在其他地方工作 - 每个开发人员的噩梦。

我在这里发布问题/解决方案,以帮助保持开发人员的理智。这些都不容易排除故障。

这两个问题都是经典的“它适用于我的机器,但不适用于他们的机器”。

  1. WPF应用在启动时崩溃。没有错误,不明白为什么。
  2. WPF应用程序启动,窗口边框显示,但内容不绘制。它只是挂起(报告为“透明窗口”)单击关闭会触发崩溃报告(计算机是Windows XP)。

1 个答案:

答案 0 :(得分:18)

1)WPF应用程序在启动时崩溃。没有错误,不明白为什么。

首先实际查找错误的关键故障排除步骤是向app.xaml添加其他错误处理。

在App.xaml标题中,添加:

<Application DispatcherUnhandledException="App_DispatcherUnhandledException" />

并在App.xaml.cs中添加如下内容:

    void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs args)
    {
        log.Fatal("An unexpected application exception occurred", args.Exception);

        MessageBox.Show("An unexpected exception has occurred. Shutting down the application. Please check the log file for more details.");

        // Prevent default unhandled exception processing
        args.Handled = true;

        Environment.Exit(0);
    }

添加这个额外的调试后,我发现了错误:

System.TypeInitializationException:'System.Windows.Media.FontFamily'的类型初始值设定项引发了异常。 ---&GT; System.ArgumentException:路径中的非法字符。

进一步研究,谷歌搜索和咖啡,导致客户端机器在注册表中的字体条目中有一个尾随'◻'字符的解决方案

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Fonts

删除这个流氓角色解决了这个问题。

No idea how this got into the registry

查看职业豁免博客"How to Crash every WPF application"

2)WPF应用程序启动,窗口边框显示,但内容不绘制。它只是挂起(报告为“透明窗口”)

这是另一个与字体相关的问题。我最初将它归结为Window.xaml中的fontSize =“16”,而不是在客户端站点上的一台(并且只有一台)机器上运行,就好像WPF拒绝将它们的字体渲染为16(?)。我删除了指定字体大小的代码并且它有效...但事实证明,它只适用于我的登录配置文件。同一台计算机上的同事登录配置文件仍然失败。我可以像我一样登录,成功运行,注销,他自己登录,运行它,并且它会因“透明的悬挂窗口”而失败。相同的机器,相同的权限。

作为最后的手段,我以他身份登录并注意到他有一个自定义主题设置了放大的字体。我将windows主题改回了经典主题......这解决了问题(?!?)。此问题似乎也与字体相关,但我没有确定绝对的根本原因。将主题更改回标准主题是一种临时解决方法。