Попытка чтения или записи защищенной памяти. Когда я вызываю showDialog метод openfileDialog - PullRequest
2 голосов
/ 08 декабря 2011

недавно в моем проекте, когда я вызываю ShowDialog метод OpenFileDialog, я получаю эту ошибку:

"Попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память повреждена".

Я искал по всему Интернету до сих пор, но моя проблема не решилась.Также я установил патч Microsoft, но поскольку мой проект находится в .Net 3.5, он был бесполезен.

Пример кода:

OpenFileDialog OFD = new OpenFileDialog(); 
OFD.ShowDialog();

Спасибо за любую помощь.

Ответы [ 3 ]

4 голосов
/ 09 декабря 2011

OpenFileDialog загружает большое количество неуправляемого кода в ваш процесс. Все расширения оболочки, которые вы установили на свой компьютер. Один из них не очень доволен вашей технологической средой, или его не хватает для того, чтобы он мог аварийно завершить работу.

Вам нужно найти расширение оболочки, которое вызывает это. Начните с Project + Properties, вкладка Debug, отметьте опцию «Включить отладку неуправляемого кода». Теперь вы увидите список библиотек DLL, которые загружаются в окне вывода. Разумны шансы, что последним, кого вы увидите перед тем, как получить исключение, будет источник проблем. Хотя вам все равно придется перепроектировать имя DLL в имя расширения оболочки.

Другой подход - рубить и сжигать. Используйте утилиту SysInternals AutoRuns. Перейдите на вкладку «Проводник» и отключите все, что не было сделано Microsoft. Задайте дополнительные вопросы об этом на superuser.com

2 голосов
/ 06 июля 2015

Это решило мою проблему. В строку подключения добавьте OLE DB Services=-1, затем его работоспособность.

Как это:

Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\DbTest\Test.accdb; OLE DB Services=-1

Или, как показано на этой ссылке

0 голосов
/ 06 августа 2013

У меня тоже была эта проблема.

Я использовал OpenFileDialog для выбора файла Excel, затем считал данные с помощью .net Oledb и записал данные в базу данных Access.

Первый раз: ОК

Второй раз, после выбора файла, появилось это сообщение: Попытка чтения или записи в защищенную память

Мое решение:

Форма «A» с OpenFileDialog и кнопкой для отображения и выбора файлов и: openFileDialog1.ReadOnlyChecked = true; openFileDialog1.ShowReadOnly = true;

Форма "Б" С get / set, чтобы установить имя файла для чтения Метод для чтения файла Excel и записи в Access db.

Из "A" отправьте имя файла для чтения в форму "B" Загрузить форму «B», выполнить основной процесс, просмотреть результаты и закрыть форму По возвращении «А» я могу выбрать другой файл и повторить процесс без ошибок

Больше нет ошибки «Попытка чтения или записи в защищенную память»

Я не знаю, является ли это лучшим решением, но приложение работает хорошо.

Привет

...