1. electron官方提供api,支持向注册表中写入协议,可通过浏览器打开

app.setAsDefaultProtocolClient('open-electron')

  问题:1. 因为该方法时在主进程中调用,安装完成之后必须运行一次程序才可写入注册表

        2. 卸载时不会主动删除注册表内容

2. 通过nsis脚本写入

  (1)不使用自定安装向导时,只需要根据electron-builder中的配置以及自己添加自定nsis脚本即可实现

// vue.config.js
pluginOptions: {
  electronBuilder: {
    builderOptions: {
      productName: buildConfig.productName,
      appId: buildConfig.appId,
      win: {
        icon: 'public/logo/electron-case.ico',
        target: 'nsis',
      },
      nsis: {
        oneClick: false,
        perMachine: true, // 是否为该计算机上所有用户安装该软件(相当于是否拥有管理员权限)
        allowElevation: true,
        allowToChangeInstallationDirectory: true,
        createDesktopShortcut: true,
        createStartMenuShortcut: true,
     include: './url_open_regedit.nsh', }, }, }, }
// url_ibsaas_regedit.nsh   -   根目录下创建该文件,写入以下内容
!macro customInstall
  DetailPrint "Register open_electron URI Handler"
  DeleteRegKey HKCR "open_electron"
  WriteRegStr HKCR "open_electron" "" "URL:open_electron"
  WriteRegStr HKCR "open_electron" "URL Protocol" ""
  WriteRegStr HKCR "open_electron\shell" "" ""
  WriteRegStr HKCR "open_electron\shell\Open" "" ""
  WriteRegStr HKCR "open_electron\shell\Open\command" "" "$INSTDIR\${APP_EXECUTABLE_FILENAME} %1"
!macroend

# 卸载时执行
!macro customUnInstall
  DeleteRegKey HKCR "open_electron"
!macroend

  (2)使用nsis安装向导时,本身就是将绿色免安装版进行二次打包压缩实现,所以不会执行该安装时的逻辑,所以这个时候必须在nsis安装向导中下功夫

      安装向导点击安装时,会执行到OnBtnInstall函数(ui_setup.nsh脚本中的方法),将写入注册表的代码写入该函数中,实现安装时写入windows注册表

DeleteRegKey HKCR "open_electron"
WriteRegStr HKCR "open_electron" "" "URL:open_electron"
WriteRegStr HKCR "open_electron" "URL Protocol" ""
WriteRegStr HKCR "open_electron\shell" "" ""
WriteRegStr HKCR "open_electron\shell\Open" "" ""
WriteRegStr HKCR "open_electron\shell\Open\command" "" "$INSTDIR\${EXE_NAME} %1" 

      为了提升用户体验,在卸载软件的时候,把写入的注册表删除,所以找到在onUninstall执行卸载的函数,在卸载函数中写入删除注册表代码:

DeleteRegKey HKCR "open_electron"

  

亲测有效!

 

03-17 14:56