我刚收到一些应用程序用户的反馈,他们在我们的应用程序的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多个项目组成,所以很难对所有项目进行测试。