Skip to content

uni-app 自动更新

1. 安卓自动更新

检查版本更新,下载新版本,安装新版本,重启应用。

js
function download() {
  const url = `${存放新版本exe的服务器地址}`;
  // #ifdef APP-PLUS
  const task = plus.downloader.createDownload(url, {}, (d, status) => {
    if (status === 200) {
      plus.runtime.install(d.filename, {
        force: true,
      }); // 安装新版本
    } else {
      // 下载失败
      console.log(`Download failed:${status}`);
    }
  });
  task.start();
}

2. windows自动更新

同样的检查版本更新,下载新版本,安装新版本,重启应用。

2.1. 检查版本更新,调用windows api

js
function download() {
  const url = `${存放新版本exe的服务器地址}`;
  window?.autoUpdate?.update(url);
}

2.2. 下载新版本,安装重启

js
function download() {
  const url = `${存放新版本exe的服务器地址}`;
  window?.autoUpdate?.update(url);
}

2.3. windows api 注册

js
contextBridge.exposeInMainWorld('autoUpdate', {
  update: (link) => {
    return ipcRenderer.invoke('update', link);
  },
});

2.4. windows api 实现

js
ipcMain.handle('update', async (event, link) => {
  try {
    const savePath = path.join(app.getPath('temp'), '软件.exe');
    const request = net.request(link);
    const file = fs.createWriteStream(savePath);

    request.on('response', (response) => {
      response.on('data', (chunk) => file.write(chunk));
      response.on('end', () => {
        file.end();
        shell.openPath(savePath); // 打开安装程序
        app.quit();
      });
    });
    request.end();
  } catch (error) {
    console.error(error);
  }
});