最近上线的electron桌面端程序安装之后启动,老是出现报错“Uncaught Exception Error:The specified procedure could not be found”。
从现象上看是加载node文件出错了。
确定了几个方向,搜索了很多也没找到解决办法
因为用的electron版本稍旧,想到是不是因为和系统dll不兼容导致的。这么一想,就离成功不远了
于是,解决办法:
1.选择桌面图标,鼠标点击右键,选择“属性”
2.在属性页,选择标签“兼容性”
3.勾选“以兼容模式运行这个程序”
4.在兼容模式下拉框选择“windows7”或“Windows XP(Service Pack 3)”
5.不介意的话,可以勾选下面的“以管理员身份运行这个程序”
然后,就看到了期待已久的程序界面。
至此,大功告成。
补充一个解决办法
package.json中检查含有c++扩展的依赖模块,查看它的模块版本,一般不兼容你所使用的node版本,需要给依赖降到兼容node的版本。
最快的方式:先确定你的node版本发布日期,比如node v14.21.1发布于2022年11月,然后上npmjs网站搜索该依赖,在[Versions]页直接定位到此2022年11月之前下载量最高的那个(精确日期去github上找),然后在你项目的package.json里修改版本即可。
强烈建议版本号前最好去掉"^"号,不然安装时可能会升级到你不想要的版本。(修改完版本号后别忘了npm先卸载再安装)
降级后或者修改完版本还不行,就要看看依赖的依赖了,可能会发现不一样的:
例如,有一个A模块要依赖node-addon-api:
// node_modules文件夹里A模块的package.json,并非你的项目package.json
"dependencies": {
"node-addon-api": "^8.1.0",
...
},
在npmjs网站中搜索该依赖,查看它的package.json
// node-addon-api 8.1.0的package.json
{
...,
"engines": {
"node": "^18 || ^20 || >= 21" // 发现它声明只兼容node 18、20、21及之后
}
}
对于有node版本兼容声明的,去npmjs网站的[Versions]页查找能兼容你的node版本。比如v3.2.1声明兼容node 14,那就去找你A模块在哪个版本会依赖这个node-addon-api:^3.2.1(或者附近版本号), 最后在你的项目中将A模块切到那个版本。
有些模块没有node版本声明怎么办?(比如上面的node-addon-api在以前没有声明),找离你node版本发布日期最接近的、下载量最高的,最后找到A模块在哪个版本依赖它们即可。