HOW TO:使用 IEHost 日志调试 Internet Explorer 中承载的 .NET 对象

文章翻译 文章翻译
文章编号: 313892 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本文说明如何为 IEHost.dll(即在 Internet Explorer 内部运行的托管公共语言运行库 (CLR) 宿主)激活扩展错误日志。

Microsoft .NET Framework SDK 文档说明如何使用 Fuslogvw.exe 调试在 Internet Explorer 中承载 .NET 模块时可能发生的问题。该实用程序的名称出自“Fusion”,它是 Microsoft 最新的零影响程序安装技术。因此,Fuslogvw.exe 只报告在下载程序集或其依赖项时出现的错误。

关于 IEHost.dll

Internet Explorer 通过两个组件来支持 .NET 模块。第一个组件是在 Mscoree.dll 中实现的 MIME 筛选器,它在 Internet Explorer 调用 IMonikerBindToObject 方法时,监视所有传入的具有 application/octet-stream MIME 类型的数据流。该筛选器在数据流中检查可移植可执行文件 (PE) 头中的信息,以确定它是否是托管模块。如果不是,该筛选器将直接返回,让 Internet Explorer 按常规方式处理该数据流。

如果数据流是 .NET 模块,该筛选器将加载 IEHost 托管程序集并调用其工厂对象,以创建所请求的对象的实例。该工厂对象则调用 IEManager(这是为 Internet Explorer 配置应用程序域 (AppDomains) 的安全管理器),并使用这个程序集的证据(也就是它的 URL 和区域成员资格)来确定程序集的加载权限。

Fusion 日志中不会记录程序集加载、安全权限或对象初始化时发生的错误。与 ActiveX 控件一样,初始化失败的 .NET 对象通常不会报错,Internet Explorer 只会在放置该对象的地方显示一个带有小“X”的方框。要查看这些错误,您必须激活 IEHost 调试日志。

有关 MIME 筛选器的其他信息,请单击下面的文章编号,查看 Microsoft 知识库文章:
260840 示例:MIMEfilt Demonstrates MIME Filter for Internet Explorer(MIMEfilt 演示 Internet Explorer 的 MIME 筛选器)

激活 IEHost 调试日志文件

警告: “注册表编辑器”使用不当可能会导致严重问题,这些问题可能要求重新安装操作系统。Microsoft 不保证能够解决因为“注册表编辑器”使用不当而产生的问题。使用“注册表编辑器”的风险由您自己承担。
  1. 依次单击开始运行,键入 regedit,然后单击确定
  2. 找到并单击下面的注册表项:
    HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework
  3. 在该项中添加一个名为DebugIEHost 的 DWORD 值,然后为其指定一个任意非零值。
  4. 添加一个名为IEHostLogFile 的字符串值。为该值指定用于记录调试日志的文件的完整路径(包括文件名)(例如,C:\Temp\IEDebug.log)。

调试日志文件中包含的信息

IEHost 创建的日志文件包含由以下两个 .NET 类写入的项目:Microsoft.IE.ManagerMicrosoft.IE.SecureFactory。 例如:
Creating security manager

Microsoft.IE.Manager: Microsoft.IE.Manager: unique id lgth = 28
Microsoft.IE.SecureFactory: Create SecureFactory() with security 
information
Microsoft.IE.Manager: Created secure factory
Microsoft.IE.SecureFactory: Creating instance of the object in the correct 
domain
Microsoft.IE.SecureFactory: pUrl = http://servername/DebugIEHost/DebugIEHost/test.htm
Microsoft.IE.SecureFactory: id = 86474707A316B616E65610000000
Microsoft.IE.SecureFactory: link = 
Microsoft.IE.SecureFactory: licenses = 
Microsoft.IE.Manager: Url = 
http://servername/DebugIEHost/DebugIEHost/test.htm
Microsoft.IE.Manager: UrlGetPartW returned 0
Microsoft.IE.Manager: CodeBase = http://servername
Microsoft.IE.Manager: Application = DebugIEHost/DebugIEHost
					
以上信息标识了用于安全目的的 URL、正在启动的应用程序的名称、用于下载依赖项的代码基和适用于该对象的许可证(以及其他有用的信息)。

最有用的信息是堆栈跟踪;如果在对象创建期间发生错误,日志文件中将记录这些信息。例如,假定您试图在类构造函数中写入文件夹:
public DebugIEHost() {
    // This call is required by the Windows.Forms Form Designer.
    InitializeComponent();

    // TODO: Add any initialization after the InitForm call
    FileStream fs = File.Open(@"C:\temp.tmp",System.IO.FileMode.CreateNew);
    StreamWriter sw = new System.IO.StreamWriter(fs);
    sw.WriteLine("Hello, world");
}
				
该操作不会成功。因为该对象尚未在 Internet Explorer 中完全建立起来,因此它会自动失败。不过,一份详细的堆栈跟踪会写入日志文件。您通常会看到两种堆栈跟踪:内部异常(由控件引发)和服务器异常(运行库接到控件抛出的异常后重新抛出的异常)。例如:
Microsoft.IE.SecureFactory: System.Reflection.TargetInvocationException:
Exception has been thrown by the target of an invocation.---->
System.Security.SecurityException: Request for the permission of 
type System.Security.Permissions.FileIOPermission, mscorlib, 
Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
failed.
   at System.Security.CodeAccessSecurityEngine.CheckHelper(PermissionSet 
grantedSet, PermissionSet deniedSet, CodeAccessPermission demand, 
PermissionToken permToken)
   ...
					
对于安全异常,您还会收到如下有关安全权限请求失败的详细信息:
The state of the failed permission was: 
<IPermission class="System.Security.Permissions.FileIOPermission, 
mscorlib, Version=1.0.3300.0, Culture=neutral, 
PublicKeyToken=b77a5c561934e089"
             version="1"
             Read="C:\temp.tmp"
             Write="C:\temp.tmp"/>
					

参考

有关使用 .NET Framework SDK 进行调试的更多信息,请访问以下 MSDN Web 站点:
使用 Microsoft .NET Framework SDK 进行调试

属性

文章编号: 313892 - 最后修改: 2003年11月11日 - 修订: 1.5
这篇文章中的信息适用于:
  • Microsoft .NET Framework 1.1
  • Microsoft Internet Explorer 5.5
  • Microsoft Internet Explorer (Programming) 6.0
关键字:?
kbhowtomaster kbmisctools kbdebug kbctrl KB313892
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com