编辑:有关详细信息,请参阅帖子的结尾。
我正在尝试通过Firebreath框架(1.7.0)创建插件来加载。我使用Internet Explorer 10在桌面模式下使用Windows 8.我使用Firebreath附带的内置测试FBTtestPlugin重现了这一点。失败是沉默的,因为创建了object元素,但是没有插件指定的任何属性。怎么去调试这个? Microsoft Internet Explorer兼容工具报告该插件无法加载。 (FBTtestPlugin加载了三个插件,因此有三个错误。)
我有其他(非FB)插件处理相同的设置(例如这里的示例:http://msdn.microsoft.com/en-us/library/dd565667(v=vs.85).aspx和本网站http://ie.microsoft.com/testdrive/browser/activexfiltering/Default.html中的所有示例一样正常。
我尝试了一系列安全设置,但这是我迄今为止最轻松的设置:
注意:我不打算保留这些设置。我只想让插件正常工作,然后向后重新启用安全设置。
更新 我部分地想出了这一点,现在可以运行FB测试FBTestPlugin了。为了使IE更容易调试,我将注册表项HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ Main \ TabProcGrowth定义为0,以限制浏览器使用一个进程。不幸的是,使用IE10,程序文件和程序文件(x86)中的iexplore.exe都指向64位版本的IE。这可以防止32位插件运行(请参阅http://support.microsoft.com/kb/2716529),症状是静默失败。
但是,我的插件仍然无法在IE中加载,上面的重新命名的问题仍然是打开的。问题仍然是无声负载故障。但是,我认为它可能与插件配置有关。兼容性测试工具中列出的CLSID(如上所示的示例)列为全0,而不是有效的GUID。此外,注册表看起来很时髦:HKCR \ Company.Name键与HKCR \ Company.Name.1一样存在,但两者都是空的(而不像正常工作的插件那样有CLSID子元素)。预期的GUID确实存在,但在虚假名称“应用程序。”下。我正在深入研究运行regsvr32时调用的代码。
全部谢谢!
答案 0 :(得分:5)
我提供这个答案是希望有人可以使用结果。
IE没有加载插件有两个原因。 1)TabProcGrowth注册表项和IE 10的32/64位问题。(http://support.microsoft.com/kb/2716529) 不要定义此密钥。
2)我的插件描述使用了撇号(例如“Gluttco的插件”),这搞砸了组件的注册。
详情2): 我通过DllRegisterServer代码进行了跟踪,发现这些虚拟的注册表项是由于我的插件描述中包含一个撇号。例如。 “乔的插件”。生成器(fbgen.py/cmake)生成了一个格式错误的FBControls.rgs文件(它没有转义引号,因此包含一个字符串文字,如(s'Joe's cool plugin')。DllRegisterServer代码(来自regsvr32)在(深入atlbase.h)时使用了这个文件的内容(嵌入式?)。奇怪的是,解析器没有检测到错误(或以某种方式错误地恢复)。从Process Monitor我可以看到一堆伪造的密钥被添加,在它再次开始添加好的注册表项之前。
现在Firebreath插件描述不应包含撇号(可能其他字符也是非法的)。对这些字符进行fbgen.py检查可能是明智的,可能会逃避,拒绝或替换它们。
答案 1 :(得分:4)
搜索发现了这个:http://msdn.microsoft.com/en-us/library/dd565667(v=vs.85).aspx
您是否有可能影响它的任何组策略?我不认为这与FireBreath直接相关,而是与activex配置相关...