我正在尝试在WCF服务应用程序中使用CefSharp.OffScreen(41.0.0)
Nuget包,并且在尝试从Visual Studio 2013运行服务时出现以下错误:
无法加载文件或程序集'CefSharp.BrowserSubprocess.Core.DLL' 或其中一个依赖项。找不到指定的模块。
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.IO.FileNotFoundException:无法加载 文件或程序集'CefSharp.BrowserSubprocess.Core.DLL'或其中一个 依赖。找不到指定的模块。
提到的程序集存在于项目的bin文件夹中,以及CefSharp's Website上列出的所有必需程序集。如果实际上还需要另一个组件,我还没弄清楚它是什么。
值得一提的其他几点:
CefSharp
正常工作
应用答案 0 :(得分:3)
几点,
IIS无法访问桌面
因此,您无法运行需要桌面的任何内容。您的控制台和WPF应用程序可以访问桌面,并称为用户交互式进程。
CEF需要桌面
Cef将需要Window管理器来创建窗口,没有它就无法呈现页面。这就是原因,错误在这里会产生误导,因为IIS无法加载需要桌面交互的依赖程序集,除非为Windows服务中的IIS进程选择了Allow service to interact with Desktop
。
控制台应用程序仅适用于登录
您必须将您的应用程序作为控制台运行,您需要登录桌面,允许IIS与桌面交互不是一个好选择,我甚至不知道它可能会遇到什么样的问题。 / p>
您可以通过修改注册表并在启动时设置控制台应用程序,将服务器设置为自动登录某些用户。因此,这样每次服务器都将重新启动,您的服务器将自动登录到指定的用户,您的控制台应用程序将启动。 (Windows 8.1没有什么困难,但你会得到一些解决方案)。
使用桌面访问的自定义Windows服务
您可以将应用程序类型更改为Windows服务而不是控制台,并且可以安装允许访问本文所示桌面的Windows服务,请注意,只有在有人登录到服务器时才会出现问题。
http://www.codeproject.com/Articles/4891/Interact-With-Desktop-when-Installing-Windows-Serv
PhantomJS无头浏览器
PhantomJS无头浏览器可以在IIS / Windows服务中运行而无需与桌面交互,但是您需要将代码转换为JavaScript而不是C#。还有其他库可以从您的应用程序管理PhantomJS。
答案 1 :(得分:0)
根据this link,似乎解决这个问题的方法是在[STAThread]线程中运行CefSharp代码。