使用GeckoFX浏览器控件时找不到xul.dll错误

时间:2014-05-30 09:41:55

标签: c# wix xulrunner geckofx

我正在使用" GeckoFx-29.0-0.6"在Windows窗体应用程序中使用firefox Web浏览器控件。

当我运行具有GeckoFX浏览器控件的Windows窗体应用程序时,每个工作都正常。

我在我的应用程序中使用以下代码,

Gecko.Xpcom.Initialize("xulrunner/");

我使用xcopy加载带有xulrunner文件夹的bin文件夹。所以在这种情况下,xul runner是从找到应用程序.exe的同一个loaction中加载的。

当我对应用程序进行wix设置时,我正在执行相同的过程,我将xulrunner文件夹放在与应用程序.exe相同的位置。但是应用程序无法调用Windows窗体。它显示消息"无法加载DLL' xul'"。

我通过更改设置来解决此问题,以便将xulrunner文件夹复制到c:/ windows / system32文件夹位置。当我这样做时,应用程序在某些机器上成功运行,但在其他机器中不起作用。

有什么方法可以解决这个问题吗?这样我就不需要将xulrunner放在system32文件夹中了?

4 个答案:

答案 0 :(得分:2)

您可以尝试提供xulrunner目录的完整路径。做类似的事情:

var programDirectory = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
Gecko.XpCom.Initialize(Path.Combine(programDirectory, "xulrunner");

这将在安装应用程序时起作用,并且如果您已将xulrunner放在输出目录中。如果您不想在那里复制它,那么您将需要使上述代码更加智能,以便当您从Visual Studio运行时,它可以找到您放置它的xulrunner

我们在多个条件下智能查找文件的类FileLocator是开源的,您可以抓取并使用它。

答案 1 :(得分:1)

我浪费了很多时间来解决问题并发现错误是由于geckofix和xulruneer版本不匹配造成的。它们都应该是一样的。查看此链接以了解更多https://bitbucket.org/geckofx/geckofx/wiki/Version_lists

答案 2 :(得分:1)

如果在使用Xpcom.Initialize("Firefox64");之前忘记运行行GeckoWebBrowser,则会收到该错误。

答案 3 :(得分:0)

抬起头,我知道这则帖子很旧,但是我发现了一些东西。如果您使用Visual Studio(在撰写本文时,我拥有的版本是2019),并且您通过NuGet添加了Geckofx45.64,则还有一个Geckofx45.64.Windows软件包。当您从Visual Studio NuGet Manager阅读此程序包的说明时,它说:

  

这仅应用于构建Geckofx ...请勿使用   如果您只想在您的应用程序中包含Geckofx,则将其打包。

好吧,我还是下载了它,并检查了此软件包的内容,并注意到它具有Geckofx.45在运行时抱怨缺少的所有文件(初始化)。因此,我添加了该软件包,Geckofx现在完全按照其指示的方式工作。

  

可将壁虎嵌入C#应用程序中的库。

     

示例用法:

        [STAThread]
        static void Main(string[] args)
        {
            Xpcom.Initialize("Firefox64");
            var geckoWebBrowser = new GeckoWebBrowser {Dock = DockStyle.Fill};
            Form f = new Form();
            f.Controls.Add(geckoWebBrowser);
            geckoWebBrowser.Navigate("www.google.com");
            Application.Run(f);
        }

希望这会有所帮助。这个让我转了一圈。