40

我已经开始在我的应用程序的几个不同位置看到一个 AccessViolationException。它从未发生在我的开发电脑,我们的测试服务器上。它也只出现在我们的 2 台生产服务器中的 1 台上。因为它似乎只发生在我们的一台生产服务器上,所以我开始查看服务器上安装的 .net 框架版本。


我发现(出于某种奇怪的原因),有问题的生产服务器有 2.0 sp2、3.0 sp2 和 3.5 sp1,而另一台生产服务器和测试服务器有 2.0 sp1。


我的应用程序仅针对 2.0 框架,决定从生产服务器卸载所有框架版本并仅安装 2.0 sp1。到目前为止,我还无法重现该问题。很有意思。

Development pc: compact 2.0 sp2, compact 3.5, 2.0 sp2, 3.0 sp2, 3.5 sp1 Test server: 2.0 sp1 Production server1: 2.0 sp1 Production server2: 2.0 sp2, 3.0 sp2, 3.5 sp1

现在,为什么我不能重现这个问题我的开发电脑上面有 2.0 sp2,我不知道。我听说这种访问冲突可能发生在某些使用远程处理的软件上,我的就是这样做的,但是当远程处理实际发生时,访问冲突从未发生过。我现在只使用 2.0 sp1 没问题,但我真的很想知道是否有人遇到过这个问题,以及他们是否找到了新版本框架的解决方法。

以下是一些异常及其堆栈跟踪:

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)
4

14 回答 14

17

从 .NET 4.5 升级到 .NET 4.5.1 后,我遇到了同样的问题。为我解决的问题是运行以下命令:

netsh winsock reset

于 2013-12-10T10:38:56.527 回答
13

我有同样的问题。2.0 运行良好。安装到 3.5 sp1 后,应用程序会出现访问冲突。

安装了http://support.microsoft.com/kb/971030并解决了我的问题,即使我没有使用 LCG。

于 2010-06-09T11:44:20.560 回答
11

Microsoft 还发布了一个修补程序(2007 年 7 月 2 日),以防止已经困扰 .NET 2.0 平台一段时间的错误“尝试读取或写入受保护的内存”。查看http://support.microsoft.com/kb/923028 - 不确定它是否适用于您,但认为您可能想检查一下。

于 2009-05-17T23:08:50.700 回答
4

对于 VS 2013,.NET Framework 4.5.1AccessViolationException在处理 SQL Server / TCP 套接字时也有一个错误(KB2915689)。升级到.NET Framework 4.5.2可以解决此问题。

报告 VS.NET AccessViolationException

尝试读取或写入受保护的内存。这通常表明其他内存已损坏。

于 2014-12-30T22:40:58.400 回答
1

我正在使用 OLEDB 并切换到 SQL 客户端,它解决了我的这个错误问题。

于 2012-02-14T17:21:11.493 回答
1

在某些 WinForms 上调用“显示”方法时,我通常会得到“尝试读取或写入受保护的内存”。我检查了这些表格并没有什么特别之处。我不知道为什么会这样(也许有人可以告诉我),但通常将在表单的“Load”事件中执行的代码移动到“Shown”事件会为我修复它,我再也看不到它了。

于 2012-12-03T20:03:27.647 回答
1

检查以确保线程中没有线程。这就是导致我这个错误的原因。请参阅此链接:尝试读取或写入受保护的内存。这通常表明其他内存已损坏

于 2013-08-08T17:27:42.910 回答
1

在某些情况下,在 VB.NET 中添加“Option Strict On”并通过正确的转换解决它发现的所有问题已经为我解决了这个问题。

于 2014-02-18T23:31:36.733 回答
1

您好 有两个可能的原因。

  1. 我们有非托管代码,我们从托管代码中调用它。那是阻止运行此代码。尝试运行这些命令并重新启动您的电脑

    cmd: netsh winsock 重置

打开cmd.exe并运行命令"netsh winsock reset catalog"

  1. 防病毒软件将非托管代码视为有害并限制运行此代码 禁用防病毒软件,然后检查
于 2015-10-20T06:29:46.903 回答
1

就我而言,当我为 IIS 服务器中的应用程序池设置“启用 32 位应用程序”=True 时,此问题已得到解决。

于 2016-06-10T10:40:37.740 回答
1

问题可能是由于项目中的混合构建平台 DLL。即,您将项目构建到任何 CPU,但在项目中已经为 x86 平台构建了一些 DLL。由于 32 位和 64 位架构的不同内存映射,这些将导致随机崩溃。如果所有的 DLL 都是为一个平台构建的,那么问题就可以解决。为安全起见,请尝试使用 32 位 x86 架构进行构建,因为它是最兼容的。

于 2017-02-22T04:05:15.950 回答
0

在我的情况下,系统中未安装共享库之一中使用的字体。

于 2016-10-06T09:32:18.750 回答
0

在我的情况下,我在添加对我的 COM DLL 的引用时遇到了“环境变量”的问题。

当我添加对我的项目的引用时,我正在寻找P:\Core路径,而我过去已将c:\core路径添加到路径环境变量中。

所以我的代码首先尝试了错误的路径。我删除了它并取消注册了 DLL 引用并使用 (regsvr32) 重新注册了我的 DLL 引用。希望这可以帮助。

于 2018-02-21T21:25:40.347 回答
0

在创建导致此问题的新项目时,我忘记添加 EntityFramework。

于 2021-03-26T08:19:52.633 回答