Ответ 1
У меня была та же проблема. 2.0 работал нормально. после установки до 3.5 sp1 приложение получает нарушение доступа.
установлен http://support.microsoft.com/kb/971030, и моя проблема решена, хотя я не использую LCG.
Я начал видеть, что 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)
У меня была та же проблема. 2.0 работал нормально. после установки до 3.5 sp1 приложение получает нарушение доступа.
установлен http://support.microsoft.com/kb/971030, и моя проблема решена, хотя я не использую LCG.
Корпорация Майкрософт также выпустила исправление (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 Sockets, Обновление до .NET Framework 4.5.2 исправляет эту проблему.
Попытка чтения или записи защищенной памяти. Это часто свидетельствует о том, что другая память повреждена.
Я использовал OLEDB, и я переключился на SQL Client, и он решил мою проблему с этой ошибкой.
Обычно я вызываю "Попытка читать или записывать защищенную память" при вызове метода "Показать" на некоторых WinForms. Я проверил, и в этих формах ничего особенного нет. Я не знаю, почему это работает (может быть, кто-то может сказать мне), но, как правило, перенос кода, который выполняется в событии "Загрузить" формы в событие "Показываемое", исправляет его для меня, и я больше его не вижу.
Убедитесь, что у вас нет потоков в потоках. То, что вызвало эту ошибку для меня. См. Эту ссылку: Попытка чтения или записи защищенной памяти. Это часто свидетельствует о том, что другая память повреждена
В некоторых случаях добавление "Option Strict On" в VB.NET и решение всех проблем, которые оно находит при правильном кастинге, решило эту проблему для меня.
В моем случае это было исправлено, когда я установил "Enable 32 Bit applications" = True для пула приложений на сервере IIS.
В моем случае шрифты, используемые в одной из разделяемой библиотеки, не были установлены в системе.
Проблема может быть связана с DLL смешанных сборных платформ в проекте. i.e Вы создаете свой проект на любом CPU, но имеете некоторые библиотеки DLL в проекте, уже созданном для платформы x86. Это приведет к случайным сбоям из-за различного отображения памяти 32-битной и 64-битной архитектуры. Если все библиотеки DLL построены для одной платформы, проблема может быть решена. Для обеспечения безопасности попробуйте переустановить 32-битную архитектуру x86, поскольку она наиболее совместима.
Привет Существуют две возможные причины.
У нас есть управляемый код, и мы вызываем его из управляемого кода. что предотвращает запуск этого кода. попробуйте запустить эти команды и перезагрузите компьютер
cmd: netsh winsock reset
откройте cmd.exe
и запустите команду "netsh winsock reset catalog"