询问者
部分电脑一启动WPF程序就引发异常

常规讨论
-
我的WPF程序在部分电脑上
(比如:
操作系统:Microsoft Windows NT 5.1.2600 Service Pack 3
运行时版本:2.0.50727.1891)
一启动就报错,错误原因如下,请各位高手指教一二,在下先谢过了
未将对象引用设置到对象的实例。
Source:YC4Editor
TargetSite:Void Application_DispatcherUnhandledException(System.Object, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs)
StackTrace: 在 YC4Editor.App.Application_DispatcherUnhandledException(Object sender, DispatcherUnhandledExceptionEventArgs e)
在 System.Windows.Threading.Dispatcher.CatchException(Exception e)
在 System.Windows.Threading.Dispatcher.CatchExceptionStatic(Object source, Exception e)
在 System.Windows.Threading.ExceptionWrapper.CatchException(Object source, Exception e, Delegate catchHandler)
在 System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
在 System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Boolean isSingleParameter)
在 System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg)
在 MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
在 MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
在 System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
在 System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
在 System.Windows.Threading.Dispatcher.Run()
在 System.Windows.Application.RunInternal(Window window)
在 System.Windows.Application.Run(Window window)
在 System.Windows.Application.Run()
在 YC4Editor.App.Main()而在其他地方则没有这个问题
全部回复
-
你在你的主窗体的狗仔方法的第一行加个断点,单步调试下,肯定有个对象为null且被使用了。要不就是你的程序依赖的一些组件在某些电脑内有被安装注册过。先自查下。
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
-
你在你的主窗体的狗仔方法的第一行加个断点,单步调试下,肯定有个对象为null且被使用了。要不就是你的程序依赖的一些组件在某些电脑内有被安装注册过。先自查下。
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
以我粗浅的看法,这个好像是WPF在 System.Windows.Threading.Dispatcher.InvokeImpl 这里的时候出错的(还没有涉及到我自己编写的代码),现在问题是我这边的电脑都没有问题,我无法调试,这些错误报告是在其他用户的电脑上收集的信息,并且如果用户如果安装了 微软官方的.NetFramework3.5 就可以解决这个问题(为什么说是官方的呢,因为有些XP用户安装了其他地方的FK3.5之后依然会出现这个问题,但是装一次官方的就可以了)而且部分用户的电脑上调用动态库,代码如下:
[DllImport("zlib.dll", CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr FreeCompress(IntPtr ptr); [DllImport("zlib.dll", CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr DeCompress(Byte[] data, Int32 length, ref Int32 out_length);
也会出现问题(我在其他地方调用的时候报:初始化引发异常,也就这两个地方是static,也就是我确定错误出现在这里),但是安装VisualStudio2010准备进行调试的时候,一切问题都没有了~~~这。。。,我无法清楚的理解安装VisualStudio2010的时候发生了什么(但应该不是和Framework有关系,因为我安装官方的FK4.0也还是无法解决问题,难道和RunTime有关?),和这个有什么关系,还请赐教。
- 已编辑 Agile-- 2012年6月14日 9:42
-
其他地方的FK3.5? 当然只有微软发布过.Net Framework 3.5, 其它地方的也是从微软拷贝的。注意要安装SP1,否则会有些没有增加和修复的问题在.Net 3.5中的。
好吧,你的WPF是基于.Net 3.5开发的,P/Invoke了这个dll. 请问你运行的时候这个zlib.dll放在你的程序相同目录下了吗?你的程序发布为x86还是AnyCpu. 为什么要问这个,因为P/Invoke的dll如果是32位的话,你的程序只能够是运行为x86, 如果dll是64位,则只能运行为现4。千万不要设置为AnyCPU。 因为AnyCPU是根据当前系统支持的平台来选择的,比如说你的XP是64位的,但是dll是32位的,你发布为AnyCPU,则你的程序运行在x64模式,则无法调用dll了。
还有.Net 4.0是基于CLR 4, 。Net3.5 3.0 2.0都是基于CLR2,所以你的WPF是基于.Net 3.5 (CLR2)的,安装了.Net 4也是没用的。不是同一个CLR
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
-
恩,经过Bob Bao大哥的讲解,这个关于启动失败我知道是什么原因了,是少了SP1。
但是Bob Bao大哥,这个关于dll的引用,我发布得确实是AnyCPU,但是我觉得不是我发布为AnyCPU的问题,因为在这些有问题的电脑上安装了VisualStudio2010准备调试是什么问题的时候,问题全部都消失了,这确实就弄得我是一头雾水了,难道问题不出在 引用动态库这个地方?但是我这个类里面只有这里是static啊,我看了一篇帖子,http://www.cnblogs.com/kirinboy/archive/2007/11/07/951903.html,我也是根据这个来判断问题出在这里的。
- 已编辑 Agile-- 2012年6月15日 1:42
-
AnyCPU如果在64位系统上他就是x64,如果在32位上,他就是x86,所以他是一个灵活的模式。而如果你的 dll只能在32位上工作,且AnyCPU的程序正好也在32位上,则没有问题。 否则AnyCPU把程序Run成x64,但dll无法兼容,则出现问题。所以为了避免这种问题发生,我们最好选择一个平台x64或者x86 和dll的支持平台一致。
静态类型初始值异常与你的P/Invoke代码关系不大。
Bob Bao [MSFT]
MSDN Community Support | Feedback to us