23

我正在尝试使用edge.js执行一些 .NET 代码以在 Electron 应用程序的窗口上打印。我已经尝试过electron-edge并且我还尝试按照 Electron docs 中的说明手动构建针对 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-edge 的步骤手动更新build.bat并将--target=1.4.12 --dist-url=https://atom.io/download/atom-shell标志添加到 node-gyp configure build

我还在我的中设置了以下 npm 配置选项.npmrc

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文件,但得到了相同的结果。

4

2 回答 2

30

在将头撞在键盘上几天后,我终于弄明白了。我从electron-userland/electron-packager#217and得到了一些提示electron/electron#892,它指出当本机模块缺少依赖项(例如 a )时,可能会出现此错误“找不到指定的模块” .dll,并且您可以使用Dependency Walker检查依赖项任何给定的.node模块。

我加载edge_nativeclr.node了 Dependency Walker 并注意到VCRUNTIME140.DLLVisual Studio 2015 C 运行时丢失了。Edge.js 附带msvcr120.dllVisual Studio 2013 C 运行时,但我一直在重建模块并msvs_version设置为 2015。

一旦我将 的副本放在vcruntime140.dll与 相同的目录中edge_nativeclr.node,一切都开始按预期工作。

于 2016-12-21T21:55:04.433 回答
3

即使我确实正确安装了 VC++ Redistributable x64,我也遇到了这个错误。事实证明,我的错误实际上并不是问题,因为一切正常(我能够使用电子边缘运行电子快速启动应用程序)。

即便如此,作者已经修复了安装,以便不会发生错误。 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

于 2017-01-16T21:21:30.303 回答