我在vb应用程序中使用Xulrunner
和GeckoFX
(两者都是版本33.0-0.1),在调试应用程序时,行
Gecko.Xpcom.Initialize(System.IO.Directory.GetCurrentDirectory() & "\xulrunner")
抛出异常:
Unable to load DLL 'xul': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
请注意,无论我如何调用Initialize()
函数,都会出现完全相同的异常。我试过了:
Gecko.Xpcom.Initialize()
Gecko.Xpcom.Initialize(System.IO.Directory.GetCurrentDirectory() & "\xulrunner")
Gecko.Xpcom.Initialize(System.IO.Directory.GetCurrentDirectory() & "\bin\xulrunner")
Gecko.Xpcom.Initialize("C:\full path here\xulrunner")
这个问题Unable to load DLL (Module could not be found HRESULT: 0x8007007E)让我使用Dependency walker来检查dll。
检查dll表明我“丢失”了一大堆其他东西,如下所示:
这反过来导致我Win 7, 64 bit, dll problems,这也没有帮助。虽然DW确实显示了一些相同的缺失DLL,但它也显示了其他未在该问题中列出的DLL。
在该问题中提供的解决方案中,我尝试过:
我在前面提到的问题中已经注意到有些人说这是OCX文件而不是DLL的问题,但我不确定如何开始这个问题。我在项目目录中找不到任何OCX文件。
我意识到问题也可能在于我如何实施GeckoFX
和Xulrunner
。以前,此应用程序使用SkyboundGecko
,GeckoFX
和Xulrunner
。使用GeckoFX
和Xulrunner
版本14时,使用此应用程序的前一位开发人员似乎遵循this教程(或非常类似的东西)。但是,这最近开始导致一些使用该应用程序的客户出现问题,因为Xpcom.dll与他们使用的不同应用程序发生冲突。此问题仅适用于那些在其计算机上安装了应用程序X(我不记得名称)的客户。其他计算机没有这个问题。
一些研究让我相信更多当前版本的GeckoFX
和Xulrunner
不再需要XPCom.dll,这意味着升级理论上应解决此问题。
因此,我开始(松散地)关注this教程,以升级Gecko
和Xulrunner
。我删除了以前对Skybound.Gecko.dll的引用,并用更新版本替换了Xulrunner。我还下载并解压缩了GeckoFX DLL和文件。我的Bin现在看起来像这样:
我将对Gecko的引用添加回项目,并将Skybound.Gecko.xxxx
的任何引用更改为Gecko.xxxx
。 (也许这会告诉你一些我不知道/没有意识到的东西,因为我见过的教程从未使用过Gecko.xxx - 例如,函数调用是Xpcom.Initialize()
而不是{{1} })
我在Windows Server 2012 R2 Standard,64位操作系统上运行Windows 8。
是否有其他方法可以避免Xpcom.dll冲突,如果没有,我该如何解决此问题?
如果需要任何其他信息,请发表评论,我会尽力提供。
答案 0 :(得分:1)
在我的情况下,由于我在xulrunner
函数中初始化Form1_Load
而导致此错误。我通过在xulrunner
函数中初始化public Form1()
来解决它。
尝试初始化xulrunner
,如下所示,
public Form1()
{
InitializeComponent();
Gecko.Xpcom.Initialize(@"C:\Users\PAVILION\Documents\visual studio 2010\Projects\SiteFilterAutomation\SiteFilterAutomation\bin\Debug\xulrunner\");
}
private void Form1_Load(object sender, EventArgs e)
{
geckoWebBrowser1.Navigate("www.google.com");
}