浏览器在唤醒Electron之前加载DLL文件



我的电子应用程序依赖于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"' 

最新更新