.NET WPF应用程序变得不稳定

时间:2013-08-22 15:30:17

标签: .net wpf debugging crash

有两个内部异常请求 得到它的错误
这是内在的例外:

InnerException: System.Runtime.InteropServices.COMException
       Message=Retrieving the COM class factory for component with CLSID {606574F0-9DE1-47A4-8310-DB87E34EAB58} failed due to the following error: 80070032 The request is not supported. (Exception from HRESULT: 0x80070032).
       Source=mscorlib
       ErrorCode=-2147024846
       StackTrace:
            at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
            at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
            at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
            at System.Activator.CreateInstance(Type type, Boolean nonPublic)
            at System.Activator.CreateInstance(Type type)
            at Laber2a.MainWindow..ctor() in \\txxx\c$\Laber\share\MainWindow.xaml.cs:line 49
       InnerException: 

这是第49行:

private IPROXLINK.IPRODDE iproDDE = new IPROXLINK.IPRODDE();

这是我们通过DDE与之沟通的com应用程序 它就是它

由于此行位于私人顶部,因此未被捕获 我的想法是将新的移动到ctor所以我可以抓住它 很抱歉,当我报告该应用仅使用Microsoft组件时 - 非常确定这是唯一的非Microsoft组件 那个clasid是IPROXLINK.IPRODDE,所以很确定它是罪魁祸首 还得到一些Keberos票证错误,以致我的IPROXLINK.IPRODDE失败 与IPROXLINK.IPRODDE的集成仅对某些操作至关重要 如果它可以被捕获,然后只是向用户报告当前会话的集成不明显更好,那么应用程序不会以未被捕获的错误开始

请让我知道我还能提供什么

生产已运行超过一年的.NET WPF应用程序
在那段时间里无数次升级 目前的版本已经存在超过一个月了 它也未通过测试中的新版本(偶尔)

在过去两天内,启动失败,错误日志中包含以下内容 当它失败时立即失败 如果它加载则稳定 它波澜不惊。
我可能会开始20次罚款,然后连续5次失败 重启似乎没有帮助 多台机器上的症状相同。
最后一组Windows更新是8/15
仅使用Microsoft控件和一个看似问题的旧com的WPF应用程序 无法在VisualStudio调试模式下获取重现错误。

通过偶数日志查看此错误在7/17和7/19之间抛出了几次 然后在昨天之前没有该错误的条目并且有20个。

如何隔离和修复错误?

在一次失败中,它表示第5行是 的xmlns:本地=" CLR-名称空间:关于劳动"

应用程序错误日志:

应用程序:Laber.exe 框架版本:v4.0.30319 描述:由于未处理的异常,进程终止。 异常信息:System.Windows.Markup.XamlParseException 堆:    在System.Windows.Markup.XamlReader.RewrapException(System.Exception,System.Xaml.IXamlLineInfo,System.Uri)    在System.Windows.Markup.WpfXamlLoader.Load(System.Xaml.XamlReader,System.Xaml.IXamlObjectWriterFactory,Boolean,System.Object,System.Xaml.XamlObjectWriterSettings,System.Uri)    在System.Windows.Markup.WpfXamlLoader.LoadBaml(System.Xaml.XamlReader,Boolean,System.Object,System.Xaml.Permissions.XamlAccessLevel,System.Uri)    在System.Windows.Markup.XamlReader.LoadBaml(System.IO.Stream,System.Windows.Markup.ParserContext,System.Object,Boolean)    在System.Windows.Application.LoadBamlStreamWithSyncInfo(System.IO.Stream,System.Windows.Markup.ParserContext)    在System.Windows.Application.LoadComponent(System.Uri,Boolean)    在System.Windows.Application.DoStartup()    在System.Windows.Application。< .ctor> b__1(System.Object)    在System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate,System.Object,Int32)    在MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object,System.Delegate,System.Object,Int32,System.Delegate)    在System.Windows.Threading.DispatcherOperation.InvokeImpl()    在System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)    在System.Threading.ExecutionContext.runTryCode(System.Object)    在System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode,CleanupCode,System.Object)    在System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object)    在System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object,Boolean)    在System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object)    在System.Windows.Threading.DispatcherOperation.Invoke()    在System.Windows.Threading.Dispatcher.ProcessQueue()    在System.Windows.Threading.Dispatcher.WndProcHook(IntPtr,Int32,IntPtr,IntPtr,Boolean ByRef)    在MS.Win32.HwndWrapper.WndProc(IntPtr,Int32,IntPtr,IntPtr,Boolean ByRef)    在MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)    在System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate,System.Object,Int32)    在MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object,System.Delegate,System.Object,Int32,System.Delegate)    在System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows.Threading.DispatcherPriority,System.TimeSpan,System.Delegate,System.Object,Int32)    在MS.Win32.HwndSubclass.SubclassWndProc(IntPtr,Int32,IntPtr,IntPtr)    在MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)    在System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)    在System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame)    在System.Windows.Application.RunDispatcher(System.Object)    在System.Windows.Application.RunInternal(System.Windows.Window)    在System.Windows.Application.Run(System.Windows.Window)    在System.Windows.Application.Run()    在Laber.App.Main()

然后(最近及时得到此错误)

Faulting application name: Laber.exe, version: 1.0.0.0, time stamp: 0x521547a3
Faulting module name: KERNELBASE.dll, version: 6.1.7601.18015, time stamp: 0x50b83c8a
Exception code: 0xe0434352
Fault offset: 0x0000c41f
Faulting process id: 0xde8
Faulting application start time: 0x01ce9f3d46607243
Faulting application path: C:\Laber\Zipper\bin\Debug\Laber.exe
Faulting module path: C:\Windows\syswow64\KERNELBASE.dll
Report Id: 85537cb3-0b30-11e3-922e-3efeb4ee1870

2 个答案:

答案 0 :(得分:0)

根据评论,InnerException导致答案

这条线路失败了。旧的COM组件。在任何错误捕获之前我都处于最顶层。

private IPROXLINK.IPRODDE iproDDE = new IPROXLINK.IPRODDE();

零星失败的原因是某些服务器上的时间不同步而且Kerberos票据被拒绝。

将新动作移动到ctor中的try catch

将来我只会将新的内在.NET类型作为私有

答案 1 :(得分:-2)

尝试隔离错误可以做的是将整个程序分成4个大的try和catch语句,然后为每个语句抛出一个。每次投掷都会有所不同,然后你可以缩小问题的根源