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

问题描述

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