问题描述
我的电子应用程序依赖于 C++ dll 文件。我能够在浏览器中唤醒 Electron App,但是它依赖的文件没有加载,我得到了 win32 error 126
。如果我选择直接双击打开Electron,而不是在浏览器中打开它,它所依赖的文件就会加载进来,一切正常。
使用浏览器唤醒 Electron 应用和双击打开 Electron 应用有什么区别?
电子生成器版本:20.19.2
电子版:2.0.18
我的代码: 包.json
"build": {
"extraResources": [
{
"from": "./a.dll","to": "../"
},{
"from": "./c.pem",{
"from": "./b.dll","to": "../"
}
],"nsis": {
"oneClick": false,"allowtochangeInstallationDirectory": true,"createDesktopShortcut": true,"createstartmenuShortcut": true,"include": "script/urlProtocol.nsh"
}
}
urlProtocol.nsh
!macro customInstall
DetailPrint "Register voice URI Handler"
DeleteRegKey HKCR "voice"
WriteRegStr HKCR "voice" "" "URL:voice"
WriteRegStr HKCR "voice" "URL Protocol" ""
WriteRegStr HKCR "voice\shell" "" ""
WriteRegStr HKCR "voice\shell\Open" "" ""
WriteRegStr HKCR "voice\shell\Open\command" "" "$INSTDIR\${APP_EXECUTABLE_FILENAME} %1"
!macroend
a.dll、b.dll、c.pem在项目根目录
解决方法
错误 126 是 ERROR_MOD_NOT_FOUND。
您可能在某处依赖相对路径。您在应用程序启动时无法控制当前目录,因此不应从以 ./
或 ../
开头的路径加载模块。
您还应该正确引用您的注册动词命令:
WriteRegStr HKCR "voice\shell\Open\command" "" '"$INSTDIR\${APP_EXECUTABLE_FILENAME}“ “%1"'