UWP App在启动时崩溃

时间:2017-04-21 10:36:32

标签: c# uwp win-universal-app windbg

我们开发了一款UWP应用程序,可以在大多数设备上正常运行。但是,客户已使用Windows 10 1511管理设备,并且应用程序在启动后立即崩溃。我们无法将VS调试器附加到它,因此我们使用windbg来启动和破坏应用程序。从我所看到的,下面的windbg的输出是应用程序崩溃的地方。

应用程序启动事件被剥离到几乎为空,因此启动后没有代码运行,但应用程序仍然崩溃。

知道如何进一步跟踪这个吗?

感谢

ModLoad: 00007ffe`ec020000 00007ffe`ec27f000   C:\Windows\SYSTEM32\dwrite.dll
ModLoad: 00007ffe`cfef0000 00007ffe`d0075000   C:\Windows\System32\Windows.Globalization.dll
(241c.2278): Windows Runtime Originate Error - code 40080201 (first chance)
(241c.2278): Windows Runtime Originate Error - code 40080201 (first chance)
windows\dxaml\xcp\components\deferral\customwriterruntimeobjectcreator.cpp(222)\Windows.UI.Xaml.dll!00007FFED0E99DA7: (caller: 00007FFED0B7A503) Exception(1) tid(2278) 80004005 Unspecified error
(241c.2278): C++ EH exception - code e06d7363 (first chance)
(241c.2278): C++ EH exception - code e06d7363 (first chance)
windows\dxaml\xcp\core\core\elements\style.cpp(582)\Windows.UI.Xaml.dll!00007FFED0D851D9: (caller: 00007FFED0BFB365) ReturnHr(1) tid(2278) 80004005 Unspecified error
windows\dxaml\xcp\components\deferral\customwriterruntimeobjectcreator.cpp(113)\Windows.UI.Xaml.dll!00007FFED0DEEE15: (caller: 00007FFED0B0B954) Exception(2) tid(2278) 80004005 Unspecified error
(241c.2278): C++ EH exception - code e06d7363 (first chance)
(241c.2278): C++ EH exception - code e06d7363 (first chance)
windows\dxaml\xcp\components\resources\resourcedictionary2.cpp(48)\Windows.UI.Xaml.dll!00007FFED0D67F6D: (caller: 00007FFED0B67966) ReturnHr(2) tid(2278) 80004005 Unspecified error
(241c.2278): Windows Runtime Originate Error - code 40080201 (first chance)
(241c.2278): CLR exception - code e0434352 (first chance)
(241c.2278): Windows Runtime Originate Error - code 40080201 (first chance)
ModLoad: 00007ffe`ea590000 00007ffe`ea5f8000   C:\Windows\System32\mscoree.dll
ModLoad: 00007ffe`e9630000 00007ffe`e96cd000   C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscoreei.dll
ModLoad: 00007ffe`ea590000 00007ffe`ea5f8000   C:\Windows\System32\mscoree.dll
ModLoad: 00007ffe`e9630000 00007ffe`e96cd000   C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscoreei.dll
(241c.2278): CLR exception - code e0434352 (first chance)
(241c.2278): CLR exception - code e0434352 (first chance)
(241c.2278): Windows Runtime Originate Error - code 40080201 (first chance)
(241c.2278): Windows Runtime Originate Error - code 40080201 (first chance)
ntdll!NtWaitForMultipleObjects+0x14:
00007ffe`f7b25c24 c3              ret
0:000> g
       ^ No runnable debuggees error in 'g'

更新1

我做了进一步的测试并且它出来了,当我删除其中包含一些xaml样式的共享字典的引用时,即使在1511上,该应用程序也可以工作。我检查了所有引用并且玩了但是没有一个它可以在1511上工作。我真的不能看到1607年引入的1511中还没有的东西。再次,一切都在1607& 1703年建立。这是代码:

项目1(主要UWP应用程序)

的App.xaml

<Application
x:Class="XXXXXXXXXXXXXXXXXXXXXX"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="XXXXXXXXXXXXXXXXXXXX"
RequestedTheme="Light">
<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ms-appx:///SDX.Library/SdxStyles.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

项目2(空UWP项目,仅包含样式和资产)SDX.Library.dll

Styles.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="SdxColors.xaml" />
    <ResourceDictionary Source="SdxControls.xaml" />
</ResourceDictionary.MergedDictionaries>

SdxColors.xaml

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<SolidColorBrush x:Key="DarkGrey" Color="#FF333333"/>
<SolidColorBrush x:Key="DarkGrey40p" Color="#FFADADAD"/>
<SolidColorBrush x:Key="DarkGrey80p" Color="#5C5C5C"/>
<SolidColorBrush x:Key="InteractionBlue" Color="#FF1781E3"/>
<SolidColorBrush x:Key="BlueRollover" Color="#FF0851DA"/>

<SolidColorBrush x:Key="Successfull" Color="#FF25B252" />
<SolidColorBrush x:Key="Warning" Color="#FFFF8B2E" />
<SolidColorBrush x:Key="Peppermint" Color="#FF0EABA9" />

SdxControls.xaml

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d">

<FontFamily x:Key="TheSansB4SemiLight">Assets/Fonts/TheSansB_400_.ttf#TheSans B4 SemiLight</FontFamily>
<FontFamily x:Key="TheSansB5Plain">Assets/Fonts/TheSansB_500_.ttf#TheSans B5 Plain</FontFamily>

<Style TargetType="Button">
    <Setter Property="Background" Value="{ThemeResource InteractionBlue}"/>
    <Setter Property="Foreground" Value="{ThemeResource ButtonForeground}"/>
    <Setter Property="BorderBrush" Value="{ThemeResource ButtonBorderBrush}"/>
    <Setter Property="BorderThickness" Value="{ThemeResource ButtonBorderThemeThickness}"/>
    <Setter Property="Padding" Value="32,8,32,8"/>
    <Setter Property="HorizontalAlignment" Value="Left"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="FontFamily" Value="{StaticResource TheSansB4SemiLight}"/>
    <Setter Property="FontWeight" Value="Normal"/>
    <Setter Property="FontSize" Value="18"/>
    <Setter Property="UseSystemFocusVisuals" Value="False"/>
    <Setter Property="FocusVisualMargin" Value="-3"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Grid x:Name="RootGrid" Background="{TemplateBinding Background}" CornerRadius="5" RenderTransformOrigin="0.5,0.5">
                    <Grid.RenderTransform>
                        <CompositeTransform/>
                    </Grid.RenderTransform>
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualState x:Name="Normal">
                                <VisualState.Setters>
                                    <Setter Target="RootGrid.(Panel.Background)" Value="{StaticResource InteractionBlue}"/>
                                </VisualState.Setters>
                                <Storyboard>
                                    <PointerUpThemeAnimation Storyboard.TargetName="RootGrid"/>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="PointerOver">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="RootGrid">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource BlueRollover}"/>
                                    </ObjectAnimationUsingKeyFrames>
                                    <PointerUpThemeAnimation Storyboard.TargetName="RootGrid"/>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Pressed">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="RootGrid">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource BlueRollover}"/>
                                    </ObjectAnimationUsingKeyFrames>
                                    <PointerDownThemeAnimation Storyboard.TargetName="RootGrid"/>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Disabled">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="RootGrid">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource InteractionBlue}"/>
                                    </ObjectAnimationUsingKeyFrames>
                                    <DoubleAnimation Duration="0" To="0.4" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="RootGrid" d:IsOptimized="True"/>
                                    <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="ContentPresenter" d:IsOptimized="True"/>
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    <ContentPresenter x:Name="ContentPresenter" AutomationProperties.AccessibilityView="Raw" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" ContentTemplate="{TemplateBinding ContentTemplate}" ContentTransitions="{TemplateBinding ContentTransitions}" Content="{TemplateBinding Content}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" Foreground="White"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

1 个答案:

答案 0 :(得分:4)

听起来您正在使用较新版本的SDK重新模板化Button控件。它可能引用了10586上不存在的资源。您需要使用旧版本重新进行重新模板化。最简单的方法是从generic.xaml复制/粘贴Style,你可以在这里找到:

C:\ Program Files(x86)\ Windows Kits \ 10 \ DesignTime \ CommonConfiguration \ Neutral \ UAP

如果安装了10586 SDK,则应看到“10.0.10586.0”文件夹。在那里,你会发现\ Generic \ generic.xaml。打开该文件,找到基本的Button样式。将整个样式复制/粘贴到SDXControls.xaml中,替换现在的样式。

这是模板的向后兼容版本。如果一切顺利,您的应用程序不应再在10586上崩溃。

从那里,您可以调整模板以满足您的设计需求。

提示:您还可以在Style中添加“x:Key”属性,然后在Buttons上显式引用Style作为StaticResource。