2011-12-08 24 views
1

的ShowDialog方法最近在我的項目,當我打電話的OpenFileDialogShowDialog方法我得到這個錯誤:試圖讀取或寫入受保護的內存。當我打電話的OpenFileDialog

「試圖讀取或寫入保護內存這通常是指示其他內存已損壞」

我以前一直在網上搜索,但我的問題沒有解決。 另外我安裝了微軟補丁,但因爲我的項目是在.Net 3.5中,所以沒有用。

代碼示例:

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

感謝您的幫助。

+0

首先,交叉檢查您正在試圖打開該文件夾或目錄是否得到開/存在與否。然後再試一次。 –

+1

你能顯示一些代碼嗎? –

+0

謝謝你的回覆, OpenFileDialog OFD = new OpenFileDialog(); OFD.ShowDialog(); 最近我得到這個錯誤,並在它正常工作之前。 –

回答

4

OpenFileDialog將大量非託管代碼加載到您的進程中。您在機器上安裝的所有外殼擴展。其中一位對您的流程環境並不滿意,或者對您的流程感到不適,從而導致流程崩潰。

您需要找到導致此問題的shell擴展。從Project + Properties,Debug選項卡開始,勾選「啓用非託管代碼調試」選項。您現在將看到在Output窗口中加載的DLL列表。賠率是合理的,在你得到例外之前你看到的最後一個是麻煩製造者。儘管您仍然必須將DLL名稱反向工程爲外殼擴展名。

另一種方法是斜線和燒傷。使用SysInternals的AutoRuns實用程序。單擊資源管理器選項卡並禁用任何非Microsoft製作的內容。在superuser.com上詢問更多問題。

+0

感謝您的幫助, 正如我所說,我的項目已經運行良好,最近我得到這個錯誤,沒有任何源代碼的變化。此外,我測試了您的解決方案(啓用非託管代碼調試)並檢查了我的Dll,但我的問題尚未解決。 此外,我仔細檢查,實現之前使用OLEDB數據庫(訪問)我沒有得到任何錯誤,我的項目顯示openFileDialog罰款,但連接和斷開數據庫後,它不能正常工作,所以我認爲內存被這個損壞行動。 最後,我認爲這個問題是一個Visual Studio錯誤。 –

+0

不要檢查*你的* DLL。我不知道任何人之前報告過這是一個VS錯誤或與OleDb類似的問題。您可以聯繫Microsoft支持尋求幫助。 –

+0

如果您搜索此錯誤標題,您會看到很多相同的問題,這些問題已經在.Net 2.0中用Microsoft路徑解決了。 如此鏈接:http://stackoverflow.com/questions/596413/attempted-to-read-or-write-protected-memory 此外,微軟支持不幫我,因爲我來自伊朗,我的國家是禁止! –

0

我也有這個問題。

我正在使用OpenFileDialog選擇一個Excel文件,然後用.net Oledb讀取數據並將數據寫入Access數據庫。

第一次:OK

第二次,選擇文件後,出現了這樣一條消息:試圖讀取或寫入保護內存

我的解決辦法:

表單「A」與OpenFileDialog和一個按鈕來顯示和選擇文件和: openFileDialog1.ReadOnlyChecked = true; openFileDialog1.ShowReadOnly = true;

表格「B」 使用get/set將文件名設置爲讀取 讀取excel文件並寫入Access數據庫的方法。

從「A」,發送文件名讀爲「B」的形式 裝載「B」的形式,執行的主要過程,查看結果和關閉形式 在返回「A」,我可以選擇其他文件,然後重複沒有錯誤

沒有更多的「嘗試讀取或寫入保護內存」錯誤

我不知道這是否是最好的解決辦法,但應用程序運行良好的過程。

問候

-2

這是解決了我的問題。在連接字符串中添加OLE DB Services=-1然後工作。

像這樣:

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

或者如圖this link

相關問題