我正在使用“ GeckoFx-29.0-0.6”在Windows Form应用程序中使用Firefox Web浏览器控件。
当我运行具有GeckoFX浏览器控件的Windows窗体应用程序时,一切正常。
我在应用程序中使用以下代码,
Gecko.Xpcom.Initialize("xulrunner/");
并且我使用xcopy加载带有xulrunner文件夹的bin文件夹。因此,在这种情况下,xul运行程序从找到应用程序.exe的相同位置加载。
当我为应用程序进行wix设置时,我正在执行相同的过程,在xulrunner文件夹中与应用程序.exe位于同一位置。但是应用程序无法调用Windows窗体。其显示消息“无法加载DLL'xul'”。
我通过更改设置将xulrunner文件夹复制到c:/ windows / system32文件夹位置来解决此问题。当我这样做时,该应用程序可以在某些机器上成功运行,但不能在其他机器上运行。
有什么办法解决这个问题?这样我就不需要将xulrunner放在system32文件夹中了?
您可以尝试提供xulrunner目录的完整路径。做类似的事情:
var programDirectory = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
Gecko.XpCom.Initialize(Path.Combine(programDirectory, "xulrunner");
安装应用程序后,并且将xulrunner放置在输出目录中,该方法将起作用。如果您不想麻烦地将其复制到其中,那么您将需要使上面的代码更智能,以便在从Visual Studio运行时可以找到将xulrunner放置在其中的位置。
我们的用于在多种条件下智能查找文件的类FileLocator是开源的,您可以获取并使用它。
我浪费了很多时间尝试解决此问题,并发现错误是由于geckofix和xulruneer版本不匹配造成的。他们应该是相同的。查看此链接以了解更多信息https://bitbucket.org/geckofx/geckofx/wiki/Version_lists
这也有效
Gecko.Xpcom.Initialize(Environment.CurrentDirectory + "\\xulrunner");
抬起头,我知道这篇文章很旧,但是我发现了一些东西。如果您使用Visual Studio(在撰写本文时,我拥有的版本是2019),并且通过NuGet添加了Geckofx45,那么还会有一个Geckofx45.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);
}
希望这会有所帮助。这个让我转了一圈。