IE9有时会显示一个红色的X,而不是.NET窗体控件,在IE8中工作

IE9有时会显示一个红色的X,而不是.NET窗体控件,在IE8中工作,.net,internet-explorer,user-controls,internet-explorer-9,.net,Internet Explorer,User Controls,Internet Explorer 9,我正在使用一个web应用程序,该应用程序使用Internet Explorer中通过“对象”标记托管的.NET Windows窗体用户控件,例如 web应用程序要求将其添加到“受信任的站点”区域,并且有一个安装程序来调整CAS权限。如果出现问题,我们还会检查大量的检查列表,以确保正确设置了受信任站点区域(和高级选项)的权限,从而允许.NET控件下载并运行 我们已经能够为数千个使用IE6、IE7和IE8的客户以及95%以上使用IE9的客户实现这一点 但是,几乎每周我们都会遇到一些已升级到IE9的客

我正在使用一个web应用程序,该应用程序使用Internet Explorer中通过“对象”标记托管的.NET Windows窗体用户控件,例如

web应用程序要求将其添加到“受信任的站点”区域,并且有一个安装程序来调整CAS权限。如果出现问题,我们还会检查大量的检查列表,以确保正确设置了受信任站点区域(和高级选项)的权限,从而允许.NET控件下载并运行

我们已经能够为数千个使用IE6、IE7和IE8的客户以及95%以上使用IE9的客户实现这一点

但是,几乎每周我们都会遇到一些已升级到IE9的客户端(作为新PC或现有PC的更新),其中.NET控件显示为白色框,左上角有一个红色X

我们已经做了很多事情来尝试并解决此问题:

  • 我们重新检查了所有“受信任的站点”权限,以确保它们设置正确
  • 我们已经验证了高级Internet选项是否与工作的机器匹配
  • 我们检查Internet Explorer加载项,通常在排除故障时禁用所有加载项(特别是防病毒加载项,已知这些加载项会阻止.NET控件运行)
  • 我们已经检查了几个客户端的临时互联网文件;引用的控件DLL未出现在此处
  • 然后我们安装了Fiddler2来监控请求;Fiddler2显示IE9没有发出加载控件DLL的请求
因此,IE9似乎根本无法处理“object”标记。这是我在“Internet区域”中加载的页面所期望的行为,但我不明白为什么在受信任区域设置中会发生这种情况

我从其他人那里搜索了其他类似的问题——我找到的最相似的问题发布在这里(http://www.pcreview.co.uk/forums/embedded-usercontrol-sometimes-displays-red-x-internet-explor-t3608356.html)但这是从2008年(IE9之前)开始的,没有人回复

问题的奇怪之处在于,我们找到的唯一解决方案是卸载IE9并恢复到IE8——这基本上每次都有效!因此,在这些客户端上似乎不存在阻止IE加载.NET控件的组策略设置或任何其他设置,因为我们可以让它在IE8中工作;它只是在IE9中不起作用


有人知道这里会发生什么吗?IE9中是否有一些额外的设置(或只有IE9才注意的Windows设置)会阻止它在受信任的站点上运行.NET控件?

我在搜索同一问题的答案时发现了这篇文章。对于超过95%的用户来说,一切都很好,但对于一些人来说,这根本不起作用。我想我已经把它追溯到运行的IE版本——32位或64位。我认为32位是默认版本,它似乎总是适合我和我们的用户。另一方面,64位根本不起作用。出现问题的用户通过从“开始”菜单中选择IE9来运行32位版本,并且正确加载了我的控件。

在许多论坛帖子和大量猜测之后,我找到了以下注册表项: HKLM\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\ActiveX兼容性{00000000-0000-0000-00000000000000}\

兼容性标志=0x400(1024)

据我所知,这是ActiveX“Killbits”标志,应用于空GUID;据我所知,IE9查找与.NET控件相关的这个键,而IE8则没有,这就是为什么它在IE8中使用相同的设置在同一台机器上工作的原因


如果你想了解更多细节,我在“如果你想了解更多细节”中发布了另一篇帖子。

你尝试过“怪癖”模式吗?而且,出于好奇,您到底想开发什么样的WinForms控件来显示在您的网页上?我的意思是,你现在拥有的所有高级web技术,为什么要使用它呢?HTML DOCTYPE应该会自动将其置于怪癖模式,但我相信在某一点上,我们使用开发人员工具尝试了所有不同的模式(IE7、IE8、兼容性视图、标准视图),但没有任何效果。用新技术替换此控件并不容易--它有数十万行代码,因此重写本身将是巨大的,而找到替换技术也不容易:我们的客户非常欣赏基于网页的工作流/链接,因此他们并不真正想要点击一次或独立应用程序,但是我们需要从HTML5或SL中得不到的FullTrust…这是真的--64位Internet Explorer在加载.NET控件(特别是不支持64位体系结构的.NET 1.1控件)时可能会遇到问题。但是在不工作的机器上,我们已经测试了32位和64位Internet Explorer,并且.NET 1.1和.NET 2.0控件都设置为“AnyCPU”架构。这些案例都没有奏效。不过,我相信这些都是64位Windows7机器,如果这有区别的话。