Попытка чтения или записи в защищенную память
Я начал видеть AccessViolationException в моем приложении несколько разных мест. Это никогда не происходило на моем компьютере разработки, нашем тестовом сервере. Он также проявил себя только на 1 из наших 2 производственных серверов. Поскольку это происходило только на одном из наших производственных серверов, я начал просматривать установленные версии .net framework на серверах.
Я обнаружил, что (по какой-то странной причине) производственный сервер, у которого были проблемы, имел 2.0 sp2, 3.0 sp2 и 3.5 sp1, в то время как другой производственный сервер и тестовый сервер имели 2.0 sp1.
мое приложение предназначено только для платформы 2.0, решено удалить все версии платформы с рабочего сервера и установить только 2.0 sp1. До сих пор мне не удалось воспроизвести эту проблему. Весьма интересный.
ПК развития: компактная 2.0 с пакетом обновления 2, компактная 3.5, 2.0 SP2 и 3.0 SP2 и 3.5 с пакетом обновления 1
Тестовый сервер: 2.0 с пакетом обновления 1
Производство сервер1: 2.0 с пакетом обновления 1
Производство server2: 2.0 пакет обновления SP2, 3.0 SP2, то 3.5 с пакетом обновления 1
Теперь, почему я не могу воспроизвести проблему на моем компьютере разработки, на котором есть 2.0 sp2, я не могу понять. Я слышал слухи, что это нарушение доступа может произойти на каком-то программном обеспечении, использующем удаленное взаимодействие, что делает мой, но нарушение доступа никогда не происходит, когда удаленное взаимодействие происходит на самом деле. Я в порядке с использованием только 2.0 sp1 на данный момент, но мне действительно интересно узнать, есть ли у кого-нибудь эта проблема, и если они нашли обходной путь для более новых версий 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)
13 ответов
У меня была та же проблема. 2.0 работал нормально. после установки до 3.5 sp1 приложение получает нарушение доступа.
установлен http://support.microsoft.com/kb/971030 и моя проблема решена, даже если я не использую LCG.
Microsoft также выпустила исправление (2 июля 2007 года), чтобы предотвратить ошибку "попытка чтения или записи защищенной памяти", которая преследовала платформу .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 также имеет AccessViolationException
ошибка (KB2915689) при работе с сокетами SQL Server / TCP. Обновление до.NET Framework 4.5.2 исправляет эту проблему.
сообщено VS.NET AccessViolationException
попытка чтения или записи в защищенную память. Это часто указывает на то, что другая память повреждена.
обычно я получаю " попытку чтения или записи защищенной памяти "при вызове метода" Show " на некоторых WinForms. Я проверил, и в этих формах нет ничего особенного. Я не знаю, почему это работает (может быть, кто-то может мне сказать), но обычно перемещение кода, который выполняется в событии "Load" формы, в событие "Shown" исправляет его для меня, и я никогда не вижу его снова.
проверьте, чтобы убедиться, что у вас нет нити в нити. Вот что вызвало эту ошибку для меня. См. эту ссылку:попытка чтения или записи в защищенную память. Это часто указывает на то, что другая память повреждена
в некоторых случаях добавление "Option Strict On" в VB.NET и решение всех вопросов, которые он находит путем правильного литья, решило эту проблему для меня.
в моем случае это было исправлено, когда я настроил "включить 32-битные приложения" =True для пула приложений на сервере IIS.
проблема может быть из - за смешанных платформ сборки DLL в проекте. Я. e вы создаете свой проект для любого процессора, но имеете некоторые библиотеки DLL в проекте, уже построенном для платформы x86. Это вызовет случайные сбои из-за различного сопоставления памяти 32-битной и 64-битной архитектуры. Если все библиотеки DLL построены для одной платформы, проблема может быть решена. Для безопасности попробуйте bulinding для архитектуры 32bit x86, потому что она наиболее совместима.
в моем случае у меня были проблемы с "переменными среды" при добавлении ссылки на мою COM DLL.
когда я добавил ссылку на мой проект, я ищу P:\Core путь, тогда как я добавил c:\core путь в прошлое в среду пути varaible.
Итак, мой код сначала пытался ошибиться. Я удалил это и не зарегистрировал ссылку DLL и повторно зарегистрировал мою ссылку DLL с помощью (regsvr32). Надеюсь, это поможет.
Привет, есть две возможные причины.
-
у нас есть неуправляемый код, и мы вызываем его из управляемого кода. это предотвращает запуск этого кода. попробуйте запустить эти команды и перезагрузите компьютер
cmd: netsh winsock reset
открыть cmd.exe
и выполнить команду "netsh winsock reset catalog"
- антивирус рассматривает неуправляемый код как вредоносный и ограничивает запуск этого кода отключить анти-вирус и тогда проверьте