c# - net - Intento de leer o escribir en la memoria protegida
excepción no controlada del tipo system accessviolationexception (13)
Empecé a ver una AccessViolationException lanzada en mi aplicación en varios puntos diferentes. Nunca ocurrió en mi pc de desarrollo, nuestro servidor de prueba. También solo se manifestó en 1 de nuestros 2 servidores de producción. Como solo parecía suceder en uno de nuestros servidores de producción, comencé a buscar en las versiones de .NET framework instaladas en los servidores.
Descubrí que (por alguna extraña razón), el servidor de producción que tenía problemas tenía 2.0 sp2, 3.0 sp2 y 3.5 sp1, mientras que el otro servidor de producción y el servidor de prueba tenían 2.0 sp1.
Mi aplicación solo está orientada al framework 2.0, decidí desinstalar todas las versiones de framework del servidor de producción e instalar solo 2.0 sp1. Hasta ahora no he podido reproducir el problema. Muy interesante.
PC de desarrollo: compacto 2.0 sp2, compacto 3.5, 2.0 sp2, 3.0 sp2, 3.5 sp1 Servidor de prueba: 2.0 sp1 Servidor de producción1: 2.0 sp1 Servidor de producción2: 2.0 sp2, 3.0 sp2, 3.5 sp1
Ahora, por qué no puedo reproducir el problema en mi pc de desarrollo que tiene 2.0 sp2 en él, no puedo entenderlo. Escuché rumores de que esta violación de acceso puede ocurrir en algún software que utiliza la comunicación remota, lo que hace el mío, pero la violación de acceso nunca se produce cuando realmente ocurre la comunicación remota. Estoy de acuerdo con el uso de 2.0 sp1 por ahora, pero estoy realmente interesado en saber si alguien ha tenido este problema, y si encontraron una solución alternativa para las versiones más recientes de frameowork.
Aquí hay un par de excepciones y sus seguimientos de pila:
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)
Compruebe para asegurarse de que no tiene hilos dentro de los hilos. Eso es lo que causó este error para mí. Vea este enlace: Intentó leer o escribir en la memoria protegida. Esto a menudo es una indicación de que otra memoria está corrupta
El problema puede deberse a DLL de plataformas de compilación mixtas en el proyecto. es decir, usted construye su proyecto en Cualquier CPU pero tiene algunas DLL en el proyecto ya construidas para la plataforma x86. Esto provocará bloqueos aleatorios debido a la asignación de memoria diferente de la arquitectura de 32 bits y 64 bits. Si todas las DLL están compiladas para una plataforma, el problema se puede resolver. Para mayor seguridad, intente anular la arquitectura de 32 bits x 86 porque es la más compatible.
En algunos casos, agregar "Opción estricta activada" en VB.NET y resolver todos los problemas que encuentra mediante el casting adecuado me ha solucionado este problema.
En mi caso, esto se solucionó cuando configuré "Habilitar aplicaciones de 32 bits" = Verdadero para el grupo de aplicaciones en el servidor IIS.
En mi caso, las fuentes utilizadas en una de las bibliotecas compartidas no se instalaron en el sistema.
En mi caso, tuve problemas con las "variables de entorno" al agregar una referencia a mi DLL COM.
Cuando agregué la referencia a mi proyecto, estaba buscando la ruta P: / Core , mientras que había agregado la ruta c: / core en el pasado en el entorno de ruta varaible.
Entonces mi código estaba intentando el camino equivocado primero. Lo eliminé y anulé el registro de la referencia de la DLL y volví a registrar mi referencia de DLL usando (regsvr32). Espero que esto ayude.
Estaba usando OLEDB y cambié a SQL Client y resolvió mi problema con este error.
Hola, hay dos razones posibles.
Tenemos código no administrado y lo estamos llamando desde código administrado. eso está impidiendo ejecutar este código. intente ejecutar estos comandos y reinicie su pc
cmd: reinicio netsh winsock
abra cmd.exe
y ejecute el comando "netsh winsock reset catalog"
- El antivirus considera que el código no administrado es nocivo y restringe la ejecución de este código para desactivar el antivirus y luego verificarlo
Microsoft también lanzó una revisión (2 de julio de 2007) para evitar el error "Intentó leer o escribir en la memoria protegida" que ha estado plagando la plataforma .NET 2.0 desde hace algún tiempo. Mire http://support.microsoft.com/kb/923028 : no está seguro de si se aplica a usted, pero pensó que le gustaría echarle un vistazo.
Normalmente aparece "Intenté leer o escribir en la memoria protegida" cuando llamo al método "Mostrar" en algunos WinForms. Lo revisé y no aparece nada especial sobre esos formularios. No sé por qué funciona esto (tal vez alguien me puede decir), pero generalmente mover el código que se ejecuta en el evento "Cargar" del formulario al evento "Mostrado" me lo arregla y nunca más lo vuelvo a ver.
Para VS 2013, .NET Framework 4.5.1 también tiene un error AccessViolationException (KB2915689) cuando se trata de SQL Server / TCP Sockets. La actualización a .NET Framework 4.5.2 corrige este problema.
Reportado VS.NET AccessViolationException
Intento de leer o escribir en la memoria protegida. Esto a menudo es una indicación de que otra memoria está corrupta.
Tuve el mismo problema después de actualizar de .NET 4.5 a .NET 4.5.1. Lo que lo solucionó fue ejecutar este comando:
netsh winsock reset
Yo tuve el mismo problema. 2.0 funcionó bien. después de instalar hasta 3.5 sp1, la aplicación obtiene una Infracción de acceso.
instalado http://support.microsoft.com/kb/971030 y mi problema está resuelto, aunque no estoy utilizando LCG.