2009-02-03 145 views
2

我寫了一個基本的Windows窗體應用程序在C#中,它具有嵌入式Web瀏覽器控件。我正在瀏覽頁面以查看相機的供稿。該應用程序在Windows XP上運行良好,但在Vista上無法運行。AccessViolationException與Windows窗體中的瀏覽器

在Vista上,我得到一個AccessViolationException。這似乎與數據執行保護有關。

http://jtstroup.net/CommentView,guid,3fa30293-a3a4-4a1c-a612-058e751ad151.aspx的文章有幾個解決方案。在頁面底部的修復程序editbin.exe/NXCOMPAT:從Visual Studio命令提示符處運行YourProgram.exe工作得很好。

不過,我想是使用後生成事件的方法,通過添加以下的建議:

REM標誌項目爲DEP不合規 調用「$(DevEnvDir).... \ VC \ bin \ vcvars32.bat「 調用」$(DevEnvDir).... \ VC \ bin \ editbin.exe「/ NXCOMPAT:NO」$(TargetPath)「

但是,這不起作用,當我嘗試通過調試器運行程序(即,我得到相同的異常)。

任何想法?

+0

您的鏈接已損壞,請使用以下鏈接:http://jtstroup.net/post/Attempted-to-read-or-write-protected-memory-This-is-often-an-indication-that-other - 內存 - 是 - corrupt.aspx – Eyal 2010-03-16 09:54:44

回答

1

根據this article

,因爲它是在安裝 項目觀察與Visual Studio 2008中 添加項目輸出源路徑 指向C:\ APP \ OBJ * .exePost建立 事件將更新c:\ app \ BIN * .exe 而不是OBJ。

在安裝程序中手動添加構建版本和 部署項目創建新安裝程序 項目|添加文件|選擇Build EXE 這是在bin文件夾

1

關閉Visual Studio宿主進程,或者將宿主進程(yourapp.vshost.exe)標記爲DEP不兼容?

0

問題。您正在嘗試的Vista版本。它是64位嗎?如果是這樣,請將代碼編譯爲x86,然後嘗試。

0

您正在查看的頁面是否包含java applet <applet>?我遇到了這個確切的問題,並將其追溯到此。這是由於WebBrowser控件使用微軟的JVM,我相信現在不支持。

0

它們是ActiveX控件,而不是小程序。

此外,如果我從Visual Studio命令提示符應用editbin.exe,或者如果使用上述的構建後事件並關閉Visual Studio宿主進程,則該程序仍然有效。

這是當我運行創建安裝程序/部署項目,運行安裝程序,然後嘗試運行程序,它仍然崩潰。客戶端機器可能不會有Visual Studio,所以在部署後我無法在目標機器上運行editbin.exe - 它需要在安裝/部署項目中啓動。所以我猜測主要輸出的post-build事件沒有被解僱,或者是在部署項目中重新啓用DEP。

0

我只好到另一行添加到我的後生成事件

調用 「$(DevEnvDir).. \ TOOLS \ vsvars32.bat」 editbin.exe/NXCOMPAT:NO「$(TargetPath)」 editbin.exe/NXCOMPAT:NO「$(ProjectDir)obj \ $(ConfigurationName)\ $(TargetFileName)」

此編輯exe文件在obj文件夾中。這似乎是我的部署項目使用。

我從這裏得到了主意。 Microsoft Forum

相關問題