Автоматическое обновление electron Удаленный сервер вернул ошибку: (404) Не найдено

#electron #auto-update

#electron #автоматическое обновление

Вопрос:

Я скопировал оба js-файла из electron auto-updater в свое приложение

auto-updater-win.js

 'use strict'

const {app} = require('electron')
const {EventEmitter} = require('events')
const squirrelUpdate = require('./squirrel-update-win')

class AutoUpdater extends EventEmitter {
  quitAndInstall () {
    if (!this.updateAvailable) {
      return this.emitError('No update available, can't quit and install')
    }
    squirrelUpdate.processStart()
    app.quit()
  }

  getFeedURL () {
    return this.updateURL
  }

  setFeedURL (updateURL, headers) {
    this.updateURL = updateURL
  }

  checkForUpdates () {

    console.log("checkForUpdates/zzzzz");
    if (!this.updateURL) {
      return this.emitError('Update URL is not set')
    }
    if (!squirrelUpdate.supported()) {
      return this.emitError('Can not find Squirrel')
    }
    this.emit('checking-for-update')
    squirrelUpdate.download(this.updateURL, (error, update) => {
        console.log("squirrelUpdate.download");

      if (error != null) {
        return this.emitError(error)
      }
      if (update == null) {
        return this.emit('update-not-available')
      }
      this.updateAvailable = true
      this.emit('update-available')
      squirrelUpdate.update(this.updateURL, (error) => {
        if (error != null) {
          return this.emitError(error)
        }
        const {releaseNotes, version} = update
        // Date is not available on Windows, so fake it.
        const date = new Date()
        this.emit('update-downloaded', {}, releaseNotes, version, date, this.updateURL, () => {
          this.quitAndInstall()
        })
      })
    })
  }

  // Private: Emit both error object and message, this is to keep compatibility
  // with Old APIs.
  emitError (message) {
    this.emit('error', new Error(message), message)
  }
}

module.exports = new AutoUpdater()
  

и squirrel-update-win.js

В renderer.js Я настроил автоматическое обновление, чтобы использовать локальные файлы, а не файлы из electron

const AutoUpdater = require(‘./auto-updater-win’);

Запускается проверка обновлений,

url-адрес выглядит так http://test.com:3000/updates/latest?v=1.0.4

к нему можно получить доступ из браузера, и он возвращает URL-адрес ZIP-файла новой версии в формате json

  this.emit('checking-for-update')
 squirrelUpdate.download(this.updateURL, (error, update) => {
 console.log("squirrelUpdate.download");
  


также вызывается из auto-updater-win.js

затем из squirrel-update-win.js когда

// Загрузите релизы, указанные по URL, и запишите новые результаты в стандартный вывод.

 exports.download = function (updateURL, callback) {
  console.log(updateURL);
  return spawnUpdate(['--download', updateURL], false, function (error, stdout) {...}
  

попадание выдает
мне эту ошибку

Система.Исключение AggregateException: произошла одна или несколько ошибок. —> System.Net.WebException: удаленный сервер вернул ошибку: (404) Не найдено. в System.Net.HttpWebRequest.EndGetResponse(IAsyncResult AsyncResult)

Есть идеи, как это решить? Пожалуйста, мне нужна помощь 🙂

Большое спасибо.

Комментарии:

1. Если у вас есть доступ к серверу, попробуйте регистрировать все входящие запросы, потому что там может быть просто неправильный URL. Кроме того, попробуйте удалить аргумент версии из URL.

2. Хорошо, попробовал это, и теперь приложение связывается с сервером, но теперь у меня есть эта ошибка, произошла одна или несколько ошибок. —> Система. Исключение: недопустимая запись выпуска: {«url»:» localhost:3000/releases/wind/1.0.4/MyApp.zip «}

3. Здесь написано примерно так: Путь Белки. Mac работает, проверяя заданную конечную точку API, чтобы узнать, есть ли новая версия приложения. Если новой версии нет, конечная точка должна вернуть HTTP 204. Однако, если существует новая версия, она будет ожидать ответа в формате HTTP 200 в формате JSON, содержащего URL-адрес ZIP-файла: { «url»: » Localhost/path/to/zip/MyApp.zip » }

4. Я сделал что-то не так здесь?

5. Может быть, вам следует указать протокол? Добавить в начале запроса http:// .