【问题标题】:The browser loads the DLL file before waking up Electron浏览器在唤醒 Electron 之前加载 DLL 文件
【发布时间】:2021-01-08 06:22:36
【问题描述】:

我的电子应用程序依赖于 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",
        "to": "../"
      },
      {
        "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在项目根目录下

【问题讨论】:

    标签: dll electron nsis


    【解决方案1】:

    错误 126 是 ERROR_MOD_NOT_FOUND。

    您可能在某处依赖相对路径。当您的应用程序启动时,您不控制当前目录,因此不应从以 ./../ 开头的路径加载任何模块。

    你还应该正确引用你注册的动词命令:

      WriteRegStr HKCR "voice\shell\Open\command" "" '"$INSTDIR\${APP_EXECUTABLE_FILENAME}“ “%1"' 
    

    【讨论】:

    • 我按照你的方法修改后,还是报错了。我的代码使用了dll:let dllPath=path.resolve(a.dll); ffi.Library(dllPath, {}),我发现DLL文件安装在resources文件夹中。
    • 不能使用path.resolve,需要配合exe路径使用path.join。
    猜你喜欢
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 2020-02-04
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多