web-dev-qa-db-ja.com

独自のサーバー(汎用プロバイダー)を使用したElectron自動アップデーターのセットアップ

FTP経由でアプリインストーラーをアップロードしたサーバーがあります。その名前は_quickmargo Setup 1.0.0.exe_で、次の場所で入手できます。

https://quickmargo.pl/dist/download/quickmargo Setup 1.0.0.exe

また、FTP経由で_latest.yml_を同じディレクトリにアップロードしました。

https://quickmargo.pl/dist/download/latest.yml

Index.jsのプロジェクトでは、

_import { autoUpdater } from 'electron-updater'

autoUpdater.setFeedURL('https://quickmargo.pl/dist/download');

autoUpdater.on('update-downloaded', () => {
    autoUpdater.quitAndInstall()
});

autoUpdater.on('update-available', (ev, info) => {
    alert('Update required!');
});

app.on('ready', async () => {
    if (process.env.NODE_ENV === 'production') {
        await autoUpdater.checkForUpdates()
    }
});
_

Package.jsonには_"version": "1.0.0",_があり、内部には_build:{}_があります。

_"win": {
  "icon": "build/icons/icon.ico",
  "publish": [{
    "provider": "generic",
    "url": "https://quickmargo.pl/dist/download"
  }]
},
_

(他のプラットフォームは気にしません)

ここで、アプリに変更を加えて、バージョン1.0.1をアップロードしたいとします。誰かがインストーラをダウンロードして自分のマシンにインストールした場合、アプリを自動更新したいとします。

これまでに作成したものすべてに問題がなく、次のステップが何かあれば教えてください。私は以下を検討します:

  • package_jsonのversionを_1.0.1_に変更します
  • ターミナルでビルドコマンドを再度実行する
  • 新しいインストーラーをサーバーの同じ場所に手動でアップロードする

編集

上記の3つのステップを実行し、新しいlatest.yml(バージョン1.0.1を使用)もアップロードしました。その結果、以前にインストールされた(新しいバージョンをサーバーにアップロードする前に)バージョン1.0.0を他のPCで実行した場合、実行されません。サーバーに1.0.1を追加したことを検出します。更新されないか、ポップアップや何かが表示されません。私は何を間違っていますか?

編集2

私はそれを自分で解決しようとしています、そして今私は1.0.2をアップロードしたので、アプリをダウンロードするためのリンクは次のとおりです:

https://quickmargo.pl/dist/download/quickmargo セットアップ1.0.2.exe

編集3

私はそれを自分で解決しようとしていました、index.jsのコードを編集しました。上記も編集しました。 _update-available_イベントでalert('Update required!');が発生することはありません。アラートが未定義であることを示すエラーメッセージウィンドウが表示されます。しかし、どうやらupdate-availableイベントは決して発行されません。


追加情報:

  • 私のアプリは vue-electron _v1.0.6_ボイラープレートで生成されました。
  • Electron-updaterのバージョンは_4.1.2_です
  • _npm run build_は実際に_.electron-vue/build.js_にあるボイラープレートからいくつかのコードを呼び出します。このファイルは上記のリンクにあります(たとえば、NODE_ENVを本番に設定します。package.jsonのスクリプトは_"build": "node .electron-vue/build.js && electron-builder",_です。
  • 私のリポジトリはプライベートであり、 electron.build docsの一部の情報 を見たので、githubでリリースをホストしたくありません。
  • また、リリースでのみ新しいリポジトリを作成できるという情報をいくつかの問題で見ましたが、よりクリーンなアプローチとして自分のサーバーですべてをホストすることを検討しています。
8
dopeCode

私はこれまで行ったことがない、ドキュメントに従ってgeneric公開オプションを使用して自動更新構成をセットアップできました。したがって、それは確実に実行可能であり、証明書による署名は必要ありませんが、ビルド構成でpublisherNameを設定したので証明書がないため、最初は問題がありました。現在のバージョンに発行元または証明書が指定されていて、新しいバージョンには指定されていない場合も、インストールされません。

1。ロギングを有効にする

_electron-updater_もインストールして、ロガーをautoUpdaterに割り当てることにより、_electron-log_パッケージのロギングを有効にすることができます。

_const log = require('electron-log');
autoUpdater.logger = log;
autoUpdater.logger.transports.file.level = 'info';
_

デフォルトの出力パスは次のとおりです。

  • Linux:_~/.config/<app name>/log.log_
  • macOS:_~/Library/Logs/<app name>/log.log_
  • Windows:_%USERPROFILE%\AppData\Roaming\<app name>\log.log_

次の手順で問題が解決しない場合は、ログの内容を投稿してください。

2。 autoUpdater.setFeedURL()は呼び出さないでください

公式ドキュメント 状態:

setFeedURL は呼び出さないでください。 electron-builderは、ビルド時に_app-update.yml_ファイルをresourcesに自動的に作成します(このファイルは内部にあるため、意識する必要はありません)。

URLはpublishプロバイダーオブジェクトで既に定義されており、アップデーターを操作するにはこれで十分です。また、setFeedURL()の引数としてのURL文字列は正しくありません オプションオブジェクトである必要があります 。ただし、publishプロバイダーですべてを指定するだけで十分です。

3。また、_.blockmap_ファイルをサーバーにアップロードします

これらは、ビルド時にセットアップ_.exe_ファイルに加えて作成する必要があります。それ以外の場合、古いバージョンと新しいバージョンのファイルが比較のために見つからなかったというエラーがログに表示されます。

4。更新サーバーのURLに末尾のスラッシュを追加します

プロバイダーオブジェクトのurlパラメーターがスラッシュで終わっていることを確認してください。 ymlファイルがなくてもymlファイルが見つかる場合がありますが、実際のダウンロード中に問題が発生する場合があります。

5。 autoUpdater.checkForUpdatesAndNotify()を使用して、より簡単な方法を試してください

より柔軟であるが、より複雑な方法でさまざまな更新イベントをリッスンし、アプリ内でそれらに反応する代わりに、まず次のコードで動作するようにしてください。それがうまくいったら、ユーザーエクスペリエンスを向上させるために、さまざまなイベントの処理に戻ることができます。

_app.on('ready', async () => {
  autoUpdater.checkForUpdatesAndNotify();
});
_

これにより、バックグラウンドでアップデートを確認してダウンロードし、アプリを閉じるとすぐに自動的にインストールします。デフォルトのWindows通知がポップアップし、利用可能なアップデートと手順について通知します。

8