试图读取或写入受保护的内存
我已经开始看到一个AccessViolationException在我的应用程序中被抛出几个不同的地方。 它从来没有发生在我的开发电脑,我们的testing服务器上。 它也仅在我们的两台生产服务器中的一台显示。 因为它似乎只发生在我们的一台生产服务器上,所以我开始在服务器上查看已安装的.net框架版本。
我发现(出于某种奇怪的原因),有问题的生产服务器有2.0 sp2,3.0 sp2和3.5 sp1,而另一台生产服务器和testing服务器有2.0 sp1。
我的应用程序只针对2.0框架,决定从生产服务器上卸载所有的框架版本,只安装2.0 sp1。 到目前为止,我还没有能够重现这个问题。 很有意思。
开发PC:compact 2.0 sp2,compact 3.5,2.0 sp2,3.0 sp2,3.5 sp1testing服务器:2.0 sp1生产服务器1:2.0 sp1生产服务器2:2.0 sp2,3.0 sp2,3.5 sp1
现在,为什么我不能重现我的开发电脑上有2.0 SP2的问题,我不明白。 我听说有传言说这种访问违规可能发生在某些使用远程处理的软件上,而远程处理实际发生时访问违规从未发生过。 我现在只用2.0 sp1就可以了,但是我真的很想知道是否有人遇到过这个问题,以及他们是否find了更新版本的frameowork的解决方法。
这里有一些例外和他们的堆栈跟踪:
System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. at ICSharpCode.TextEditor.TextArea.HandleKeyPress(Char ch) at ICSharpCode.TextEditor.TextArea.SimulateKeyPress(Char ch) at ICSharpCode.TextEditor.TextArea.OnKeyPress(KeyPressEventArgs e) at System.Windows.Forms.Control.ProcessKeyEventArgs(Message& m) at System.Windows.Forms.Control.ProcessKeyMessage(Message& m) at System.Windows.Forms.Control.WmKeyChar(Message& m) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. at System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam) at System.Windows.Forms.NativeWindow.DefWndProc(Message& m) at System.Windows.Forms.Control.DefWndProc(Message& m) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.TextBoxBase.WndProc(Message& m) at System.Windows.Forms.RichTextBox.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
我有同样的问题。 2.0工作正常。 安装3.5 sp1之后,应用程序将获得访问冲突。
微软还发布了一个修补程序(2007年7月2日),以防止“尝试读取或写入受保护内存”的错误,该错误一直困扰着.NET 2.0平台。 看http://support.microsoft.com/kb/923028 – 不知道它是否适用于你,但认为你可能想检查出来。
从.NET 4.5升级到.NET 4.5.1后,我遇到了同样的问题。 对我来说固定的是运行这个命令:
netsh winsock reset
对于VS 2013, .NET Framework 4.5.1在处理SQL Server / TCP套接字时也有一个AccessViolationException
错误 (KB2915689)。 升级到.NET Framework 4.5.2可以解决此问题。
报告VS.NET AccessViolationException
试图读取或写入受保护的内存。 这通常表示其他内存已损坏。
我正在使用OLEDB,我切换到SQL客户端,它解决了我的问题,这个错误。
当在某些WinForms上调用“Show”方法时,我通常会“尝试读取或写入受保护的内存”。 我查了一下,这些表格并没有什么特别之处。 我不知道为什么这样做(也许有人可以告诉我),但通常将在窗体的“Load”事件中执行的代码移动到“Shown”事件中,这样我就再也看不到它了。
检查以确保线程内没有线程。 这是我造成这个错误的原因。 请参阅此链接: 尝试读取或写入受保护的内存。 这通常表示其他内存已损坏
在某些情况下,在VB.NET中添加“Option Strict On”,并解决所有通过正确投射find的问题,为我解决了这个问题。
在我的情况下,这是固定的,当我设置“启用32位应用程序”= IIS服务器中的应用程序池的True。
在我的情况下,在一个共享库中使用的字体没有安装在系统中。
该问题可能是由于项目中的混合构build平台DLL。 即,将您的项目构build到任何CPU,但是已经为x86平台构build的项目中包含一些DLL。 由于32位和64位架构的内存映射不同,这些会导致随机崩溃。 如果所有的DLL都是为一个平台而构build的,那么问题就可以解决了。 为了安全起见,build议32位x86架构,因为它是最兼容的。
嗨有两个可能的原因。
-
我们有未托pipe的代码,我们从托pipe代码中调用它。 这是防止运行此代码。 尝试运行这些命令并重新启动您的电脑
cmd:netsh winsock重置
打开cmd.exe
并运行命令"netsh winsock reset catalog"
- 反病毒正在考虑将不受pipe理的代码视为有害,并限制运行此代码禁用反病毒 ,然后再进行检查