无法在 NodeJS 中使用本机 Windows 库
Posted
技术标签:
【中文标题】无法在 NodeJS 中使用本机 Windows 库【英文标题】:Unable to use native Windows library in NodeJS 【发布时间】:2017-07-06 17:08:21 【问题描述】:我正在尝试编写一个使用 Windows 本机通知的简单 Electron 应用程序。对于这个用途,我依赖electron-windows-interactive-notifications。
当我在我的项目上运行npm install
和electron-rebuild
之后,我得到:
App threw an error during load
Error: The specified module could not be found.
\\?\C:\Users\moro\projects\tw-en-ty\node_modules\electron-windows-interactive-notifications\build\Release\notifications_bindings.node
at Error (native)
at process.module.(anonymous function) [as dlopen] (ELECTRON_ASAR.js:173:20)
at Object.Module._extensions..node (module.js:583:18)
at Object.module.(anonymous function) [as .node] (ELECTRON_ASAR.js:173:20)
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)
at bindings (C:\Users\moro\projects\tw-en-ty\node_modules\bindings\bindings.js:76:44)
根据NodeJS issue,这可能是本机依赖问题。当我通过 dependencywalker 检查 notifications_bindings.node
时,我看到以下缺少的直接 DLL(在许多缺少的嵌套中):
坦率地说,我不知道问题是什么:
Electron 使用错误? electron-windows-interactive-notifications 使用错误? NodeRT 中的问题? node-gyp 中的问题? 我的环境有问题?你能帮我离问题解决更近一步吗?
非常感谢!
问题也被问到here
【问题讨论】:
看起来您缺少 node.dll 和 interactivenotifications.dll(至少可以这么说)。它们是否存在于您的主 .exe 文件(electron.exe 或其他文件) @SimonMourier 感谢您的回复。好吧,当我搜索丢失的 .dll 时,我会在以下位置看到它们:node.dll -node_modules\electron\dist\
; interactivenotifications.dll - node_modules\electron-windows-interactive-notifications\Release\
; api-...-.dll - c:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\x64\api-ms-win-crt-runtime-l1-1-0.dll
;我会说它们需要以与正确的 kernel32.dll 或 ole32.dll 相同的方式相对或绝对引用
您应该将它们复制到与主 exe(electron.exe 或其他,如果您重命名它)相同的目录中。你不需要把它们放在 \windows\system32
@SimonMourier - 复制它们后,出现了一个新错误:App threw an error during load Error: %1 is not a valid Win32 application.
通过用 64 位依赖项替换一些 32 位依赖项解决此问题后,我得到 A dynamic link library initialization routine failed.
我认为这整个路径- 一步一步的黑客是一个死胡同。我希望图书馆的创建者能看看这个。
@MartinD 你明白了吗?遇到同样的问题...
【参考方案1】:
尝试以下操作:
首先安装 MS Visual Studio。npm install --global windows-build-tools
以管理员身份运行
运行电子重建.\node_modules\.bin\electron-rebuild.cmd
替代方法:
cd node_modules\electron-windows-interactive-notifications
node-gyp rebuild --target=1.8.4 --arch=x64 --dist-url=https://atom.io/download/electron
其中 1.8.4 是电子版
【讨论】:
以上是关于无法在 NodeJS 中使用本机 Windows 库的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Windows 上使用电子 4.0.6 加载一些本机节点 js 模块
在 WSL2 中:安装了适用于 Windows 10 nodejs 的 Ubuntu 20.04,但 npm 无法正常工作