仅在XP上的WebBrowser上的AccessViolationException

时间:2013-06-12 13:51:55

标签: c# .net security windows-xp

我刚收到一些应用程序用户的反馈,他们在我们的应用程序的Windows XP上遇到了问题。此应用程序在Windows 7上运行正常,但在Windows XP上运行不正常。

另一个奇怪的事情:如果我在Windows XP工作站(使用VS2010)上构建它,它可以在我的本地工作站上运行,如果我将这个版本放在另一个XP工作站上,它就不再起作用了。

在XP上运行时,我只是错误地告诉我XXXXX has encountered a problem and needs to close. We are sorry for the inconvenience

我在EventViewer应用程序的日志中找到了这个堆栈跟踪:

Application: MyApplication.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.AccessViolationException
Stack:
   at System.Windows.Forms.UnsafeNativeMethods+IOleObject.DoVerb(Int32, IntPtr, IOleClientSite, Int32, IntPtr, COMRECT)
   at System.Windows.Forms.WebBrowserBase.DoVerb(Int32)
   at System.Windows.Forms.WebBrowserBase.TransitionFromRunningToInPlaceActive()
   at System.Windows.Forms.WebBrowserBase.TransitionUpTo(AXState)
   at System.Windows.Forms.WebBrowserBase.OnParentChanged(System.EventArgs)
   at System.Windows.Forms.Control.AssignParent(System.Windows.Forms.Control)
   at System.Windows.Forms.Control+ControlCollection.Add(System.Windows.Forms.Control)
   at My.NameSpace.Here.Controls.LearningCenterControl.InitializeComponent()
   at My.NameSpace.Here.Controls.LearningCenterControl..ctor()
   at My.NameSpace.Here.MainForm.InitializeComponent()
   at My.NameSpace.Here.MainForm..ctor()
   at My.NameSpace.Here.MainForm.get_Instance()
   at My.NameSpace.Here.Program.Main(System.String[])


For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.

这发生在我的一个userControl的设计者的InitializeComponent上:

this.m_learingResourceBrowser = new System.Windows.Forms.WebBrowser();

我猜XP存在安全问题,但是什么?

我找到this

REM Mark project as DEP Noncompliant
call "$(DevEnvDir)..\..\VC\bin\vcvars32.bat"
call "$(DevEnvDir)..\..\VC\bin\editbin.exe" /NXCOMPAT:NO "$(TargetPath)"

我已将此Post-build事件放在exe项目上,但我没有看到任何改进

我也尝试用我的exe直接运行命令:

editbin.exe /NXCOMPAT:NO YourProgram.exe

有关可能导致此问题的原因的任何想法吗?

修改 我发现这个answer表明:

  

测试DEP问题是否可以执行此操作。

     

右键单击“我的电脑”选择“属性”和“高级”下   “启动和恢复,单击设置现在单击”编辑“记事本   刚刚开始。只需更换行:代码:noexecute optionn by   AlwaysOff重新启动您的PC以完成交易。

在此之后我不再有这个错误了。所以我的问题是:目前我只在主exe上完成了之前的操作。我应该在所有dll上执行此操作吗?因为我的项目由230多个项目组成,所以很难对所有项目进行测试。

0 个答案:

没有答案