C#的Winform程序,内有一个很简单的openFileDialog1.ShowDialog() == DialogResult.OK语句,发布后在XP、2003环境下使用都正常,但是在Win7(64位)、Win2008下反复执行第三次就会报“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”错误。会是什么原因造成的?开发是使用VS2008+.Net2.0。下面是报错信息:************** 异常文本 **************
System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
   在 System.Windows.Forms.FileDialogNative.IFileDialog.Unadvise(UInt32 dwCookie)
   在 System.Windows.Forms.FileDialog.RunDialogVista(IntPtr hWndOwner)
   在 System.Windows.Forms.FileDialog.RunDialog(IntPtr hWndOwner)
   在 System.Windows.Forms.CommonDialog.ShowDialog(IWin32Window owner)
   在 System.Windows.Forms.CommonDialog.ShowDialog()
   在 System.Windows.Forms.Control.OnClick(EventArgs e)
   在 System.Windows.Forms.Button.OnClick(EventArgs e)
   在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   在 System.Windows.Forms.Control.WndProc(Message& m)
   在 System.Windows.Forms.ButtonBase.WndProc(Message& m)
   在 System.Windows.Forms.Button.WndProc(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)

解决方案 »

  1.   

    补充一下,有人说提升运行权限可以解决,我测试了一下,貌似不是权限的问题。直接打开发布安装后的程序目录,右键exe使用管理员方式运行,错误依旧。但是如果右键exe选择模拟windows2003运行,问题不再发生。所以看起来提升权限运行的方式好像不行。感觉是兼容性出了问题。
      

  2.   

    我的是vs2005 + win7 64位,也是一样的问题