Pergunta

Eu comecei a ver um AccessViolationException sendo jogado no meu aplicativo um vários pontos diferentes. Nunca ocorreu no meu pc desenvolvimento, o nosso servidor de teste. Ele também só se manifestou em 1 de nossos servidores de produção 2. Porque ele só parecia acontecer em um de nossos servidores de produção, eu comecei a olhar para as versões do .NET Framework instaladas nos servidores.

Descobri que (por algum motivo estranho), o servidor de produção que foi ter problemas teve 2.0 SP2, 3.0 SP2, e 3.5 SP1, enquanto o outro servidor de produção e o servidor de teste teve 2.0 SP1.

Meu aplicativo tem como alvo apenas o quadro 2.0, decidiu desinstalar todas as versões do quadro do servidor de produção e instalar apenas 2.0 SP1. Até agora eu não fui capaz de reproduzir o problema. Muito interessante.
pc desenvolvimento: compacto 2.0 SP2, compacto 3.5, 2.0 SP2, 3.0 SP2, 3.5 SP1 servidor de teste: 2.0 SP1 server1 produção: 2.0 SP1 Servidor_2 Produção: 2.0 SP2, 3.0 SP2, 3.5 SP1
Agora, por que não posso reproduzir o problema no meu pc desenvolvimento que tem 2.0 SP2 sobre ele, eu não posso descobrir. Ouvi rumores de que esta violação de acesso pode ocorrer em algum software que utiliza comunicação remota, o que mina faz, mas a violação de acesso não happends quando comunicação remota está realmente ocorrendo. Eu estou ok com o uso de apenas 2,0 SP1 para agora, mas eu estou realmente interessado em saber se alguém já teve este problema, e se eles encontraram uma solução alternativa para as versões mais recentes do frameowork.

Aqui está um par das exceções e seus rastreamentos de pilha:

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)
Foi útil?

Solução

Eu tive o mesmo problema. 2.0 funcionou bem. após a instalação de até 3.5 SP1, a aplicação recebe violação de acesso.

http://support.microsoft.com/kb/971030 e meu problema é resolvido, mesmo que eu não estou usando LCG.

Outras dicas

Eu tive o mesmo problema após a atualização do .NET 4.5 para .NET 4.5.1. Que fixa-lo para mim foi executar este comando:

netsh winsock reset

A Microsoft também lançou uma correcção (02 de julho de 2007), para evitar o erro "Tentativa de ler ou gravar memória protegida", que tem sido assola a plataforma .NET 2.0 há algum tempo. Olhe para http://support.microsoft.com/kb/923028 - não tenho certeza se ela se aplica para você, mas achei que você gostaria de verificá-la.

Para VS 2013, .NET Framework 4.5.1 também tem um bug AccessViolationException (KB2915689) quando se lida com o SQL Server TCP Sockets /. Atualizando para .NET Framework 4.5.2 corrige esse problema .

Relatados VS.NET AccessViolationException

Tentativa de ler ou gravar memória protegida. Isso é muitas vezes uma indicação de que outra memória está corrompida.

Eu estava usando OLEDB e eu mudei para SQL cliente e ele resolveu o meu problema com este erro.

Eu costumo ficar "Tentativa de ler ou memória protegida gravação" ao chamar o método "Show" em alguns WinForms. Eu verifiquei e não parece nada de especial sobre essas formas. Eu não sei por que isso funciona (talvez alguém pode me dizer), mas geralmente mover o código que é executado no "Load" evento do formulário para os "mostrado" correções de eventos para mim e eu nunca vê-lo novamente.

Certifique-se de que você não tem tópicos dentro de threads. Isso é o que causou este erro para mim. Veja este link: Tentativa de ler ou gravar memória protegida. Isso é muitas vezes uma indicação de que outra memória está corrompida

Em alguns casos, a adição de "opção no estrito" em VB.NET e resolução de todos os problemas que ele encontra por vazamento adequada tem resolvido este problema para mim.

O problema pode ser devido ao mistos plataformas de compilação DLLs no projeto. ou seja Você constrói o seu projeto para Qualquer CPU, mas têm algumas DLLs do projeto já construído para a plataforma x86. Estes irão causar travamentos aleatórios por causa de mapeamento de memória diferente de 32 bits e arquitetura de 64 bits. Se todas as DLLs são construídos para uma plataforma do problema pode ser resolvido. Para bulinding tentativa segurança para a arquitetura de 32 bits x86, porque é o mais compatível.

Hi Há duas razões possíveis.

  1. Temos código gerenciado-un e estamos chamando-o a partir do código gerenciado. que está impedindo a executar este código. tente executar estes comandos e reinicie o PC

    cmd: netsh winsock reset

cmd.exe aberto e "netsh winsock reset catalog" comando de execução

  1. Anti-virus está considerando código gerenciado-un como prejudiciais e restringindo a executar esse código Desativar anti-vírus e, em seguida, verifique

No meu caso esta foi fixado quando eu configurar 'Permitir aplicativos de 32 bits' = true para pool de aplicativos no servidor IIS.

Em minhas fontes de caso utilizados em um dos biblioteca compartilhada não foi instalado no sistema.

No meu caso eu tive problemas com as "variáveis ??de ambiente", acrescentando referência à minha COM DLL.

Quando eu adicionei a referência ao meu projeto, eu estava à procura de P: \ Core caminho, enquanto eu tinha adicionado a c: \ núcleo caminho no passado para caminho varaible ambiente.

Então, o meu código estava tentando caminho errado em primeiro lugar. I removido e que não registada a referência DLL e re-registado minha referência DLL usando (regsvr32). Espero que isso ajude.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top