Installation Can';无法获取HKLM\Software\MozillaPlugins\中列出的NPAPI插件进行实例化

Installation Can';无法获取HKLM\Software\MozillaPlugins\中列出的NPAPI插件进行实例化,installation,npapi,Installation,Npapi,我已经编写了一个NPAPI插件,如果我把它放在%ProgramFiles\Mozilla FireFox\plugins中,它就会实例化并正确运行。但是,由于我希望它也能与其他浏览器一起使用,我的首选是在HKLM\Software\MozillaPlugins\中注册它,如前所述。因此,在我的安装程序中,我创建以下注册表项: [HKEY_LOCAL_MACHINE\SOFTWARE\MozillaPlugins\@alanta.com/winvnctl] “ProductName”=“WinVn

我已经编写了一个NPAPI插件,如果我把它放在%ProgramFiles\Mozilla FireFox\plugins中,它就会实例化并正确运行。但是,由于我希望它也能与其他浏览器一起使用,我的首选是在HKLM\Software\MozillaPlugins\中注册它,如前所述。因此,在我的安装程序中,我创建以下注册表项:

[HKEY_LOCAL_MACHINE\SOFTWARE\MozillaPlugins\@alanta.com/winvnctl]

“ProductName”=“WinVnc NPAPI控件”

“路径”=“C:\Program Files\Alanta\WinVncCtl.dll”

[HKEY_LOCAL_MACHINE\SOFTWARE\MozillaPlugins\@alanta.com/winvnctl\MimeTypes]

[HKEY_LOCAL_MACHINE\SOFTWARE\MozillaPlugins\@alanta.com/winvnctl\MimeTypes\application/x-alanta-vnc]

“Description”=“Alanta的VNC服务器NPAPI插件”

当然,我的安装程序正在将WinVncCtl.dll文件放在正确的位置。(我还尝试将其重命名为npWinVnc.dll,理论上它可能需要以“np”开头,没有任何风险。我还尝试了版本标记、MIME类型等的各种组合。)

我是这样实例化的:

vncDiv.innerHTML = "<object id='vncServerControl' classid='@alanta.com/WinVncCtl' type='application/x-alanta-vnc' />";
vncDiv.innerHTML=“”;
但它似乎没有以这种方式实例化。然而,如上所述,如果我在object标记中省略classid,而只是将文件npWinVnc.dll放在我的plugins目录中,那么生活就是美好的


有没有想过我的方法会出什么问题?

所以我没能让它按照医生说的那样工作。但这种特殊的组合似乎是成功的:

(1) 文件名显然必须以“np”开头,因此我将其重命名为“npWinVnc.dll”,并适当地调整了注册表项:

[HKEY_LOCAL_MACHINE\SOFTWARE\MozillaPlugins\@alanta.com/winvnctl]

“ProductName”=“WinVnc NPAPI控件”

“路径”=“C:\Program Files\Alanta\npWinVnc.dll”

[HKEY_LOCAL_MACHINE\SOFTWARE\MozillaPlugins\@alanta.com/winvnctl\MimeTypes]

[HKEY_LOCAL_MACHINE\SOFTWARE\MozillaPlugins\@alanta.com/winvnctl\MimeTypes\application/x-alanta-vnc]

“Description”=“Alanta的VNC服务器NPAPI插件”

我知道plugins目录中的文件必须以“np”开头,但显然,直接注册的文件也必须以“np”开头。对我来说,这似乎是一个古怪的要求(而且没有文档记录),但显然是这样的

(2) 如果在标记中指定ClassId(即使还指定了MIME类型),它似乎不起作用,因此只需指定MIME类型,如下所示:

vncDiv.innerHTML = "<object id='vncServerControl' type='application/x-alanta-vnc' />";
vncDiv.innerHTML=“”;

这种特殊的组合对我起了作用。我更喜欢使用ClassID,因为它可以消除插件目录中的DLL和安装程序放置的DLL之间的歧义,但这并不重要。不过,对于ClassId为什么不起作用,我仍然愿意接受建议。(我试着浏览Mozilla源代码,但认为我的时间最好花在nsObjectFrame.cpp:-()

的第1000行左右,所以我还没能让它按照文档所说的方式工作。但这种特殊的组合似乎很成功:

(1) 文件名显然必须以“np”开头,因此我将其重命名为“npWinVnc.dll”,并适当地调整了注册表项:

[HKEY_LOCAL_MACHINE\SOFTWARE\MozillaPlugins\@alanta.com/winvnctl]

“ProductName”=“WinVnc NPAPI控件”

“路径”=“C:\Program Files\Alanta\npWinVnc.dll”

[HKEY_LOCAL_MACHINE\SOFTWARE\MozillaPlugins\@alanta.com/winvnctl\MimeTypes]

[HKEY_LOCAL_MACHINE\SOFTWARE\MozillaPlugins\@alanta.com/winvnctl\MimeTypes\application/x-alanta-vnc]

“Description”=“Alanta的VNC服务器NPAPI插件”

我知道plugins目录中的文件必须以“np”开头,但显然,直接注册的文件也必须以“np”开头。对我来说,这似乎是一个古怪的要求(而且没有文档记录),但显然是这样的

(2) 如果在标记中指定ClassId(即使还指定了MIME类型),它似乎不起作用,因此只需指定MIME类型,如下所示:

vncDiv.innerHTML = "<object id='vncServerControl' type='application/x-alanta-vnc' />";
vncDiv.innerHTML=“”;

这种特殊的组合让它对我起到了作用。我更喜欢使用ClassID,因为它可以消除插件目录中的DLL和安装程序放置的DLL之间的歧义,但这并不重要。不过,我仍然愿意接受有关ClassID不起作用的建议。(我试着浏览Mozilla源代码,但认为我的时间最好花在nsObjectFrame.cpp:-()

的第1000行左右。对于你正在做的事情,你可能还想至少看看FireBreath源代码;那里有很多好的示例,框架也很棒(坦白:我写的)但是,它是开源的,你可以随心所欲地使用它


对于您正在做的事情,您可能还想至少看看FireBreath的源代码;那里有很多好的示例,而且框架本身非常棒(坦白说:我写的)。但是,它是开源的,您可以根据自己的意愿使用它