CefSharp.OffScreen
ブラウザを使用してスクレイピング作業を行うアプリケーションがあります。これは、CSScript を使用してスクリプト環境で実行され、CefSharp を呼び出して作業を行う動的にロードされるクラスを実行します。
CefSharp は、bin
環境内で完全に正常に動作します。 を使用して、すべての CefSharp ファイルを独自のフォルダーに配置する方法もありますProbingPath
。ただし、これは、CefSharp がプライマリ実行可能ファイルと同じフォルダー、またはProbingPath
設定したフォルダーで実行されている場合にのみ機能します。 ProbingPath は、実行可能パスのサブフォルダーとしてのみ設定できます。
CefSharp は、私が作成した という単純な DLL からマーシャリングされていますMyCompany.Browser
。Browse
URL文字列を受け取り、html文字列を返す単一のメソッドが呼び出されます。ブラウザを起動しCefSharp.OffScreen
て実行することでこれを行いますが、これはすべて通常の bin 環境で問題なく動作します。
CSScript が実行する動的に読み込まれるスクリプトには、これと機能的に同等のコードがあります (非常に単純化され、高度に工夫されたテスト)。
using MyCompany.Browser;
public string GetResult(string url)
{
using (var browser = new CefSharpHeadlessBrowser())
{
return browser.Browse(url);
}
}
CSScript の動作は、using MyCompany.Browser;
参照を与えると、実行元のフォルダーを調べ、MyCompany.Browser.dll という名前の dll を見つけてロードします。 CefSharpHeadlessBrowser
は、このMyCompany.Browser
名前空間、 という DLLMyCompany.Browser.dll
内、どこかのサーバー上のプライマリ bin フォルダー内の型であり、CSScript が喜んでインスタンス化します。
ただし、browser.Browse()
メソッドを実行しようとすると、次のようになります。
Unable to locate required Cef/CefSharp dependencies:
Missing:CefSharp.BrowserSubprocess.exe
Missing:CefSharp.BrowserSubprocess.Core.dll
Missing:CefSharp.Core.dll
Missing:CefSharp.dll
Missing:icudtl.dat
Missing:libcef.dll
これらのメッセージは、MyCompany.Browser.dll がロードした のCheckDependencies()
メソッドCefSharp.dll
から送信されています。ただし、それは読み込みプロセスに関する限りです。CSScript と同じフォルダーにあるため、MyCompany.Browser が読み込まれました。MyCompany.Browser.dll が CefSharp.dll を直接参照しているため、CefSharp.dll は依存関係チェッカーを実行するのに十分な時間ロードされ、上記のエラー メッセージが表示されます。
しかし、動的に読み込まれるスクリプトが同じ bin フォルダーで実行されていないため、CefSharp の残りの部分は読み込まれませんでした。代わりに、次の場所で実行されています。
c:\Users\admin\AppData\Local\Temp\CSSCRIPT\dynamic\879ec55a-f761-4306-a79c-1af6cf08b312.tmp
app.config
CefSharp にはレジストリ エントリ、要素、または CefSharp に「ここですべてのファイルを見つけることができる場所です」と通知する何かがあることを誰かに教えてもらいたいです。そのようなものはありますか?そうでない場合、これを修正する他の方法はありますか?