Попытка чтения или записи защищенной памяти

Я начал видеть, что AccessViolationException бросает в моем приложении несколько разных точек. Это никогда не происходило на моем компьютере разработки, нашем тестовом сервере. Он также проявился только на одном из наших 2 производственных серверов. Поскольку это только казалось на одном из наших производственных серверов, я начал смотреть на установленные версии .net на серверах.


Я обнаружил, что (по какой-то странной причине), у производственного сервера, у которого были проблемы, были 2.0 sp2, 3.0 sp2 и 3.5 sp1, тогда как у другого производственного сервера и тестового сервера было 2.0 sp1.


Мое приложение предназначено только для рамки 2.0, решил удалить все версии фреймворка с производственного сервера и установить только 2.0 sp1. До сих пор я не смог воспроизвести проблему. Очень интересно.

Разработка pc: compact 2.0 sp2, compact 3.5, 2.0 sp2, 3.0 sp2, 3.5 sp1 Контрольный сервер: 2.0 sp1 Сервер производства1: 2.0 sp1 Сервер производства2: 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)

Ответ 1

У меня была та же проблема. 2.0 работал нормально. после установки до 3.5 sp1 приложение получает нарушение доступа.

установлен http://support.microsoft.com/kb/971030, и моя проблема решена, хотя я не использую LCG.

Ответ 2

Корпорация Майкрософт также выпустила исправление (2 июля 2007 г.), чтобы предотвратить появление ошибки "Попытка чтения или записи защищенной памяти", которая уже некоторое время преследует платформу .NET 2.0. Посмотрите http://support.microsoft.com/kb/923028 - не уверен, что это относится к вам, но подумал, что вы можете проверить его.

Ответ 3

У меня была такая же проблема после обновления с .NET 4.5 до .NET 4.5.1. Для меня была выполнена эта команда:

netsh winsock reset

Ответ 4

В VS 2013, .NET Framework 4.5.1 также имеет ошибку AccessViolationException (KB2915689) при работе с SQL Server/TCP Sockets, Обновление до .NET Framework 4.5.2 исправляет эту проблему.

Сообщено VS.NET AccessViolationException

Попытка чтения или записи защищенной памяти. Это часто свидетельствует о том, что другая память повреждена.

Ответ 5

Я использовал OLEDB, и я переключился на SQL Client, и он решил мою проблему с этой ошибкой.

Ответ 6

Обычно я вызываю "Попытка читать или записывать защищенную память" при вызове метода "Показать" на некоторых WinForms. Я проверил, и в этих формах ничего особенного нет. Я не знаю, почему это работает (может быть, кто-то может сказать мне), но, как правило, перенос кода, который выполняется в событии "Загрузить" формы в событие "Показываемое", исправляет его для меня, и я больше его не вижу.

Ответ 8

В некоторых случаях добавление "Option Strict On" в VB.NET и решение всех проблем, которые оно находит при правильном кастинге, решило эту проблему для меня.

Ответ 9

В моем случае это было исправлено, когда я установил "Enable 32 Bit applications" = True для пула приложений на сервере IIS.

Ответ 10

В моем случае шрифты, используемые в одной из разделяемой библиотеки, не были установлены в системе.

Ответ 11

Проблема может быть связана с DLL смешанных сборных платформ в проекте. i.e Вы создаете свой проект на любом CPU, но имеете некоторые библиотеки DLL в проекте, уже созданном для платформы x86. Это приведет к случайным сбоям из-за различного отображения памяти 32-битной и 64-битной архитектуры. Если все библиотеки DLL построены для одной платформы, проблема может быть решена. Для обеспечения безопасности попробуйте переустановить 32-битную архитектуру x86, поскольку она наиболее совместима.

Ответ 12

Привет Существуют две возможные причины.

  • У нас есть управляемый код, и мы вызываем его из управляемого кода. что предотвращает запуск этого кода. попробуйте запустить эти команды и перезагрузите компьютер

    cmd: netsh winsock reset

откройте cmd.exe и запустите команду "netsh winsock reset catalog"

  1. Антивирус рассматривает не управляемый код как вредный и ограничивающий запуск этого кода отключить антивирус, а затем проверить