返回

Electron 增量更新的新方式,无需管理员权限,轻松实现拖拽更新!

前端

Electron 增量更新的必要性

Electron 是一个非常流行的桌面应用框架,它允许你使用 JavaScript、HTML 和 CSS 来构建跨平台的桌面应用程序。Electron 应用通常会随着时间的推移而更新,因此需要一种有效的方式来管理更新。

增量更新是一种常用的更新方式,它只下载应用程序更新的部分,而不是整个应用程序。这可以节省带宽并减少下载时间。Electron 提供了增量更新的内置支持,但默认情况下,它需要管理员权限才能在 Windows 系统上工作。

无需管理员权限的 Electron 增量更新

为了避免需要管理员权限,我们可以使用一种变通的方式来实现 Electron 的增量更新。这种方式的基本原理是,我们将应用程序的更新文件下载到一个临时目录,然后使用 asar 工具将更新文件打包成一个新的 .asar 归档文件。最后,我们将这个新的 .asar 归档文件复制到应用程序的安装目录,并替换旧的 .asar 归档文件。

详细步骤

1. 创建临时目录

首先,我们需要创建一个临时目录来存储更新文件。这个目录可以是任意位置,但为了方便起见,我们可以将其创建在应用程序的安装目录下。

mkdir app-update-temp

2. 下载更新文件

接下来,我们需要下载更新文件。我们可以使用 Electron 的内置更新模块来下载更新文件。

const {autoUpdater} = require('electron-updater')

autoUpdater.on('update-downloaded', () => {
  // 更新文件已下载完成
})

autoUpdater.checkForUpdates()

3. 将更新文件打包成 .asar 归档文件

更新文件下载完成后,我们需要使用 asar 工具将更新文件打包成一个新的 .asar 归档文件。

asar pack app-update-temp app-update.asar

4. 复制新的 .asar 归档文件到应用程序的安装目录

最后,我们需要将新的 .asar 归档文件复制到应用程序的安装目录,并替换旧的 .asar 归档文件。

cp app-update.asar app/app.asar

5. 重启应用程序

更新完成后,我们需要重启应用程序,以便新版本生效。

app.relaunch()

拖拽更新

除了上述方法之外,我们还可以使用拖拽的方式来实现 Electron 的增量更新。这种方式更加简单,但需要在应用程序中添加一些额外的代码。

首先,我们需要在应用程序中添加一个拖拽事件监听器,以便在用户拖拽更新文件到应用程序窗口时触发。

const {ipcMain} = require('electron')

ipcMain.on('update-file-dropped', (event, path) => {
  // 用户已拖拽更新文件到应用程序窗口
})

接下来,我们需要在应用程序中添加一些代码来处理拖拽的更新文件。我们可以使用 asar 工具将更新文件打包成一个新的 .asar 归档文件,然后将这个新的 .asar 归档文件复制到应用程序的安装目录,并替换旧的 .asar 归档文件。

const {asar} = require('asar')
const {app} = require('electron')

ipcMain.on('update-file-dropped', (event, path) => {
  asar.pack(path, 'app-update.asar', () => {
    // 更新文件已打包完成
    const appPath = app.getAppPath()
    const asarPath = path.join(appPath, 'app/app.asar')
    fs.copyFileSync('app-update.asar', asarPath)
    app.relaunch()
  })
})

结语

以上就是 Electron 增量更新的新方式,它不需要管理员权限,并且可以轻松实现拖拽更新。希望这篇