Я начал видеть, что 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)