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