c# - 해결 - vb net 보호 된 메모리 를 읽 거나 쓰려고 했습니다




보호 된 메모리를 읽거나 쓰려고 시도했습니다. (9)

.NET 4.5에서 .NET 4.5.1로 업그레이드 한 후에도 동일한 문제점이있었습니다. 나를 위해 고쳐진 것은이 명령을 실행하는 것이었다.

netsh winsock reset

내 응용 프로그램에서 몇 가지 다른 지점에 던져지고 AccessViolationException보고 시작했습니다. 그것은 내 개발 PC, 우리의 테스트 서버에서 결코 발생하지 않습니다. 또한 2 개의 프로덕션 서버 중 1 개에서만 자체적으로 나타납니다. 프로덕션 서버 중 하나에서만 발생하기 때문에 서버에 설치된 .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를 가지고 내 개발 PC에 문제를 재현 할 수 없다, 나는 알아낼 수 없다. 원격 액세스를 위반하는 일부 소프트웨어에서이 액세스 위반이 발생할 수 있다는 루머가 있지만 원격 액세스가 실제로 발생하면 액세스 위반이 발생하지 않는다고 들었습니다. 지금은 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)

OLEDB를 사용하고 SQL 클라이언트로 전환하고이 오류로 인해 내 문제가 해결되었습니다.


경우에 따라 "Option Strict On"을 VB.NET에 추가하고 적절한 캐스팅을 통해 발견 된 모든 문제를 해결하면이 문제가 해결됩니다.


나는 똑같은 문제가 있었다. 2.0은 정상적으로 작동했습니다. 최대 3.5 sp1을 설치 한 후 응용 프로그램에서 액세스 위반이 발생합니다.

http://support.microsoft.com/kb/971030 설치하면 LCG를 사용하지 않아도 문제가 해결됩니다.


마이크로 소프트는 또한 .NET 2.0 플랫폼을 당황스럽게하고있는 "보호 된 메모리를 읽거나 쓰려고 시도했다."라는 오류를 방지하기 위해 2007 년 7 월 2 일자로 핫픽스를 발표했다. http://support.microsoft.com/kb/923028 - 귀하에게 해당되는지는 확실하지 않지만 체크 아웃을 원할 것으로 생각됩니다.



이 문제는 프로젝트의 혼합 빌드 플랫폼 DLL로 인한 것일 수 있습니다. 즉, 모든 CPU에 프로젝트를 빌드하지만 이미 x86 플랫폼 용으로 빌드 된 프로젝트에 일부 DLL이 있습니다. 32 비트 및 64 비트 아키텍처의 서로 다른 메모리 매핑으로 인해 임의의 충돌이 발생합니다. 모든 DLL을 하나의 플랫폼 용으로 빌드하면 문제를 해결할 수 있습니다. 안전을 위해 가장 호환되기 때문에 32 비트 x86 아키텍쳐를 사용하십시오.


제 경우에는 '32 비트 응용 프로그램 활성화'= IIS 서버의 응용 프로그램 풀에 대해 True를 설정하면이 문제가 해결되었습니다.


필자의 경우 공유 라이브러리 중 하나에서 사용 된 글꼴이 시스템에 설치되지 않았습니다.





servicepacks