作为在AWS AppStream环境下测试我的应用程序的一部分,我遇到了一个异常,该异常在与任务栏进行交互时抛出(对我而言,设置自定义工具提示)。我已经可以使用以下代码在空白的WPF应用程序中重现它:
private void Button_Click(object sender, RoutedEventArgs e)
{
TaskbarItemInfo = new System.Windows.Shell.TaskbarItemInfo { Description = DateTime.Now.ToLongTimeString() };
}
在AppStream中运行该代码会为NotImplementedException
提供以下堆栈跟踪:
at MS.Internal.AppModel.ITaskbarList.HrInit()
at System.Windows.Window.ApplyTaskbarItemInfo()
at System.Windows.Window.OnTaskbarItemInfoChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.Window.<>c.<.cctor>b__0_0(DependencyObject d, DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
at My.App.MainWindow.Button_Click()
我发现我认为这是相同的潜在问题:ITaskbar HrInit method throws exception under RemoteApp。有趣的是,我已经在RemoteApp中测试了该应用程序,并且在该应用程序中运行良好。我猜微软从那以后就改进了RemoteApp,以避免在其平台上出现此问题。
当资源管理器未运行时,似乎发生了异常-这是有道理的,因为当不存在任务栏时很难与之交谈。实际上,我已经可以通过杀死explorer.exe来重现同样的问题。
other question中提到的唯一可能的解决方法是查看SystemInformation.TerminalServerSession
,以检测您何时在这种环境中运行,并避免使用TaskbarItemInfo
。这对我来说不起作用,因为它还会检测到正常的远程桌面连接-这是我的应用程序非常常见的用例,并且代码可以正常工作。
我唯一想到的另一件事是将代码行包装在try / catch块中,然后盲目地吞下可能出问题的地方。这还不是世界末日,因为如果没有我的自定义任务栏工具提示逻辑,该应用程序的运行也将很好。但这感觉....错了。几乎感觉像是WPF应该执行的那种错误处理。我知道没有运行explorer.exe是一件奇怪的事,但是我听说有人使用备用shell,或者(也许更有可能)看到explorer.exe不时崩溃。