私は Edge.js を使用して、.NETコードを実行し、Electronアプリのウィンドウに印刷しようとしています。私は electron-Edge を試しました Electronのドキュメントの手順 に従って、ElectronをターゲットにしたEdge.jsモジュールを手動で構築しようとしましたが、次のようになりましたパッケージアプリでEdgeを使用しようとするとエラーが発生します。
Error: The specified module could not be found.
\\?\C:\path\to\app\app-1.0.0\resources\app.asar.unpacked\node_modules\Edge\lib\native\win32\x64\6.5.0\Edge_nativeclr.node
at Error (native)
at process.module.(anonymous function) (ELECTRON_ASAR.js:178:20)
at process.module.(anonymous function) [as dlopen] (ELECTRON_ASAR.js:178:20)
at Object.Module._extensions..node (module.js:583:18)
at Object.module.(anonymous function) [as .node] (ELECTRON_ASAR.js:192:18)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)
at Function.Module._load (module.js:424:3)
at Module.require (module.js:483:17)
at require (internal/module.js:20:19)
私はファイルシステムを確認しましたが、実際にはEdge_nativeclr.node
モジュールが存在します。私の疑いは、どういうわけかモジュールを正しく構築しておらず、おそらく間違ったバージョンのノードをターゲットにしているため、electronがモジュールをインポートできないことです。
electron-Edgeの手順 を含むいくつかの異なることを試して、build.bat
を手動で更新し、--target=1.4.12 --dist-url=https://atom.io/download/atom-Shell
フラグをnode-gyp configure build
に追加しました。
また、.npmrc
に次のnpm構成オプションを設定します。
target=1.4.12
Arch=x64
target_Arch=x64
disturl=https://atom.io/download/electron
runtime=electron
build_from_source=true
msvs_version=2015
そして、生成されたbuild.bat
ファイルを指すようにEdge_NATIVE
環境変数を設定して、Edge_nativeclr.node
を実行しましたが、同じ結果が得られました。
数日間キーボードに頭をぶつけた後、ようやくこれを理解しました。 electron-userland/electron-packager#217
および electron/electron#892
からいくつかのヒントを得ました。これは、「指定されたモジュールが見つかりませんでした」というエラーが発生する可能性があることを示していましたネイティブモジュールに.dll
などの依存関係がなく、 Dependency Walker を使用して、任意の.node
モジュールの依存関係を確認できる場合。
Dependency WalkerにEdge_nativeclr.node
をロードしましたが、Visual Studio 2015 CランタイムであるVCRUNTIME140.DLL
がないことに気付きました。 Edge.jsにはVisual Studio 2013 Cランタイムのmsvcr120.dll
が付属していますが、msvs_version
を2015に設定してモジュールを再構築しています。
vcruntime140.dll
のコピーをEdge_nativeclr.node
と同じディレクトリに配置すると、すべてが期待どおりに機能し始めました。
VC++再頒布可能x64を正しくインストールしていても、このエラーが発生しました。私の場合のエラーは、すべてが正常に機能したため、実際には問題ではなかったことがわかりました(electron-Edgeでelectron-quick-startアプリを実行できました)。
それでも、作成者はエラーが発生しないようにインストールを修正しました。 https://github.com/kexplo/electron-Edge/issues/25#issuecomment-272908409
補足として、Dependency WalkerでEdge_nativeclr.nodeをロードすると、VCRUNTIME140.DLLが正しく解決されます(たとえば、PCのC:\ Windows\System32の下など)。ただし、いくつかの疑問符やエラーが表示される場合があります。これらは、Dependency Walkerのいくつかの制限によるものであり、実際の問題ではないことがわかりました。参照 Dependency Walker:行方不明のDLL