【发布时间】:2011-04-25 11:57:33
【问题描述】:
我有一个 .NET 应用程序和一个安装程序。使用 VS 2005 构建。
开发机器是Windows XP SP3。
一旦有人在 Windows7 下安装它。并得到以下错误
WinForm 线程异常
System.AccessViolationException:试图读或写保护 记忆。这通常是一个迹象 其他内存已损坏。 在 System.Windows.Forms.UnsafeNativeMethods.IOleObject.DoVerb(Int32 iVerb、IntPtr lpmsg、IOleClientSite pActiveSite,Int32 索引,IntPtr hwndParent,COMRECT lprcPosRect) 在 System.Windows.Forms.AxHost.DoVerb(Int32 动词) 在 System.Windows.Forms.AxHost.InPlaceActivate()
另一个
类型异常 'System.Windows.Forms.AxHost+InvalidActiveXStateException' 被抛出。方法“断开”不能 此时被调用。
现在,想知道问题出在哪里,并在这个Windows7上安装了VS 2005。 现在,该解决方案可以毫无例外地编译和运行。我构建了设置,并在这台 Win7 机器上重新安装了新构建的设置...
我得到了例外。为什么会这样?
使用VS启动的应用程序没有异常,但是在启动已安装的可执行文件后抛出它......
但是,我成功(无一例外地)在一些装有操作系统的机器上测试了已安装的应用程序 > Win XP:Windows 7 (x64) 和 Windows Server 2008 (x64) ...
研究日志,我发现了产生异常的代码:
Panel p = new Panel();
p.Margin = new Padding(0);
p.Dock = DockStyle.Fill;
p.Controls.Add(display); // 'display' is an ActiveX control instance
Logger.LogMessage("before");
this.tableLayoutPanel.Controls.Add(p); // protected memory EXCEPTION
Logger.LogMessage("after");
所以,我看到“之前”然后AccessViolationException: Attempted to read or write protected memory... 没有看到“之后”...
此类异常的常见原因是什么?
详情
- 我在应用程序中使用了一些第三方 ActiveX;
- 使用 ActiveX 的示例(用 C++ 编写)在这台机器上运行良好。
- 该解决方案针对 x86 平台;
- 我成功地在 **Windows Server 2008 (x64) 和 Windows 7 (x64) 上启动了该应用程序;
- 尝试使用“Windows XP 兼容性(SP2、SP3)”模式 - 结果相同(例外)。
- 试图将应用程序安装在
ProgramFiles的其他文件夹中。我使用 C:\TestFolder 作为安装路径 - 结果是一样的:AccesViolationException....
【问题讨论】:
-
您的 .NET 应用程序中有任何 Win32API 代码吗?
-
你在使用 ActiveX 控件吗?
-
在“Windows XP”模式下运行会发生什么?
-
@leppie:那是一个虚拟机。保证可以正常工作。
-
@leppie,您的意思是 XP 兼容模式,而不是 XP 模式。听起来相似,但不是一回事。
标签: .net visual-studio visual-studio-2010 windows-7 .net-2.0